2013-03-12 3 views
1

번만으로 업데이트되지 않은 경우에만 으로 그려진 UIView 파생 뷰가 있습니다.UIView setNeedsDisplay가 효과가 있습니까?

[self setNeedsDisplay]을 호출해도 아무런 효과가 없습니다. 무엇이 이것을 일으킬 수 있습니까? inContext 정의되지 않은 :

이 드로잉 코드는

drawLayer이 경우 (정의 빈의 drawRect()와 함께)

  • drawRect:, 또는
  • drawLayer:inContext:에 있는지 여부를 중요하지 않습니다 , drawRect가 불려갑니다. 그러나 단 한 번 (레이아웃 중).

    - (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx { 
        // drawing occurs, but just once (during view layout) 
    } 
    
    `- (void)drawRect:(CGRect) rect { 
        // empty -- never called 
    } 
    

    내가 무엇을 시도했다의 작은 목록 :

    • [자기 setNeedsDisplay]
    • [self.layer setNeedsDisplay]
    • [self.mySubLayer setNeedsDisplay]
    • 자기. contentMode = UIViewContentModeRedraw;
    • 대신 (효과)를 .nib에서 층 (그리고 하위 레이어)의 사용을 제거 (효과)
    • 그것을로드없고 단지의 drawRect를 사용하는 직접 뷰를 생성
+1

setNeedsDisplay가 호출되는지 확인 하시겠습니까? 해당 코드를 표시하고 예상되는 위치에서 중단 점을 설정하고 다시보고하십시오. –

+1

Cubs의 의견을 따르려면 주 스레드에서 UIKit 메서드를 호출 하시겠습니까? 그렇지 않으면 아무 일도 일어나지 않는 것처럼 이상한 결과를 가져올 수 있습니다. –

+0

예, 중단 점을 설정했습니다. 좋은 지적. 당연하지. 이것에 대해 몇 시간을 보냈습니다. 내가 찾을 수있는 모든 게시물을 읽고 모든 것을 두 번 확인했습니다. 인스턴스조차도 펜촉으로 초기화되고 IBOutput으로 푸시 된 인스턴스와 동일합니다 (주소는 변경되지 않음). 변수가 많기 때문에 CALayer를 사용하지 않도록 모든 것을 변환했습니다.하지만 차이는 없었으므로 다시 되돌려 놓을 것입니다. iOS 프레임 워크에 대해 이상한 점이 있습니다 ... – StuWeldon

답변

5

그래서이 될 수있다 응답으로 표시된 : 주 스레드에서 UIKit 메서드를 호출해야합니다.

+1

특히 다음과 같이 사용하십시오 :'[self performSelectorOnMainThread : @selector (setNeedsDisplay) withObject : self waitUntilDone : TRUE];' – StuWeldon

관련 문제