2009-06-17 7 views
0

나는 터치를 기반으로 많은 그래픽을 조작하는 UIView 하위 클래스가 있습니다. 모든 [self setNeedsDisplay] 통화는 괜찮은 것 같습니다.다른 클래스의 UIView에서 setNeedsDisplay 호출

그러나 동일한 동일한 UIView 하위 클래스 인스턴스에 인스턴스 변수 포인터를 사용한 다음이를 조작하고 다른 UIView 클래스에서 [UIViewSubClass setNeedsDisplay]를 호출하고 DrawRect를 호출하지 않습니다. setNeedsDisplay를 호출 할 수있는 제한이 있습니까?

(이 방법의 drawRect를 버튼이 다른 UIView 하위를 클릭하면 방법이 호출되고 호출하지만,하지 않습니다.)

-(IBAction)loadGrid2; 
{ 
    tempSoundArray = musicGridView1.soundArray; 
    [musicGridView1.soundArray setButtonArrayToNull]; 
    [musicGridView1 setNeedsDisplay]; 
    musicGridView1.soundArray = tempSoundArray; 
    NSLog(@"loadGrid2 was called"); 
} 

답변

1

의 drawRect : 그것은 의미합니다 경우에만 호출됩니다; 즉,보기가 화면 상에 보이고, 화면 상에 있고, 더러워 져야합니다. 귀하의 drawRect : 전화가 있습니까? 뷰가 처음 화면 상에 나타날 때 호출되어야합니다.

1

벤에 추가하려면 이것은 대부분 다른 곳에 문제가 있음을 의미합니다. 포인터가 0이 아니거나 유효하지 않거나 뷰가 계층 구조에 제대로 추가되지 않을 수 있습니다.

이 형식 동작을보기에서 대신 뷰 컨트롤러에서 처리하지 않는 것이 좋습니다. 뷰 컨트롤러에서 비헤이비어를 제어하고 프레젠테이션 상태를 저장하고 뷰 클래스를 하위 클래스로 만들지 않습니다. 적은 "포인터 전달"으로 코드를 단순화합니다. 이렇게하면이 유형의 문제를 쉽게 디버깅 할 수 있습니다.

뷰 컨트롤러가 부풀어 오르는 느낌이 들면 여러 뷰 컨트롤러간에 책임을 나누는 것을 고려하십시오.

관련 문제