2013-07-04 3 views
0

drawRect : 메서드에서 저수준 드로잉을 수행하는 사용자 지정된 UIView가 있습니다. XIB 파일에서 뷰를 인스턴스화하면 올바르게 작동합니다. 방법 실행, 결과보기가 현재 도면이 이전 호출에서 만든 오래된 도면과 중복 포함 : 나는 예컨대, 프로그래밍 방식으로 인스턴스화 할 때 Howerver 상황이 그것의 drawRect가 때마다 나타납니다프로그래밍 방식으로 사용자 지정된 UIView 만들기

MyView *view = [[MyView alloc] initWithFrame: rect]; 

[self.view addSubView: view]; 

, 이상한 이동합니다. 즉, drawRect :가 호출 될 때보기가 지워지지 않은 것처럼 보입니다.

미리 도움을 주셔서 감사합니다.

+0

질문에 게시 한 코드는 어디에서 구할 수 있습니까? 아마도 여러보기를 추가하는 중일 것입니다. – rmaddy

+0

문제점은 무엇입니까? 어떤보기가 지워지지 않습니까? 현재 도면이 의미하는 바는 무엇입니까? –

+0

내 앱은 일정한 시간 간격으로 setNeedsDisplay 메서드를 호출하여 뷰를 업데이트합니다. 각 갱신시에 drawRect 메소드 내에서 새로운 그림이 작성됩니다. 내 문제는이 새로운 (또는 현재) 도면이 이전 업데이트에서 만들어진 일부 오래된 도면과 겹쳐서 나타나는 것입니다. –

답변

0

viewDidLoad 메서드 또는 어디에서든지이 코드를 확인해 봅시다. 그리고 직사각형 프레임 크기가 0이나 0이 아닌지 확인하십시오.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    MyView *view = [[MyView alloc] initWithFrame: rect]; 

    NSLog(@"rect size %@ %@",NSStringFromCGRect(rect.bounds),NSStringFromCGRect(view.bounds)); 

    view.backGroundCOlor = [UIColor redColor]; 

    [self.view addSubView: view]; 
} 

작동하는지 확인하십시오.

+0

제 질문은 내 코드를 어디에 두 었는지는 말하지 않았지만 코드는 기본보기 컨트롤러의 viewDidLoad 메서드 내에있었습니다. 그래서 위에서 제안한 것과 정확히 같습니다 (backgroundColor 제외). 그래서 작동하지 않습니다 ... –

0

방금 ​​문제의 원인이 nil로 설정된보기의 backgroundColor 속성이라는 것을 알았습니다.

backgroudColor = nil이 투명 배경에 유효한 값이기 때문에 이것이 버그인지 궁금합니다. 가능한 설명은 현재 UIView 클래스 참조가 알려지지 않더라도 사용자 정의 드로잉이 뷰의 drawRect 메서드에서 수행 될 때 배경색이 투명이 아닌 다른 색이어야한다는 것입니다. 사람이 더 나은 설명을 제공 할 수있는 경우

MyView *view = [[MyView alloc] initWithFrame: rect]; 
[self.view addSubView: view]; 
self.view.backgroundColor = [UIColor darkGrayColor]; 

내가 감사하겠습니다 :

는 명확하게하기 위해, 이것은 내가 한 것입니다.