인터페이스 작성기에서 XIB 파일로 사용자 정의보기 컨트롤러를 디자인하고 있으며 내 View Controller에 추가 할 사용자 지정 UIView 하위 클래스가 있습니다.XIB의 UIView 하위 클래스가 표시되지 않습니다. (drawRect : never called)
내 TonerEffectButtonView
클래스 UIView
의 서브 클래스 (그리고 UIButton
함께 할 수 없다)와 여기 내 코드입니다 : 여기 뷰 컨트롤러에 내 사용자 정의보기를 넣어 한 방법이다
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
-(void)prepareWithSelector:(SEL)selector onTarget:(id)targ withFilter:(GPUImageFilter*)filter{
self.gpuImageView = [[GPUImageView alloc] initWithFrame:self.frame];
UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:targ action:selector];
[self addGestureRecognizer:gesture];
selectedFilter = filter;
[filter addTarget:self.gpuImageView];
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
}
initWithFrame:
어쨌든 호출되지 않습니다, 나는 initWithCoder:
의 모든 사용자 정의 그래서 그것을 구현하지 않은 필요하지 않습니다. 난 GPUImageView
(내가 사용하고있는 라이브러리의 일부입니다) programatically 내보기 내부에 만드는 해요 및 카메라 입력을 추가하는 경우 (준비 메서드에서 어떻게되는지 물어 보면). Prepare 메서드가 외부에서 호출되었고 UIView의 프레임이 호출되었을 때 올바른지인지 확인했습니다. [super drawRect:rect];
에 중단 점이 있으며 절대로 호출되지 않으며 프로그램을 실행하면 내 사용자 정의보기가 표시되지 않고 터치 이벤트도 수신되지 않습니다. 그러나 메서드 을 작성하면이 호출되므로 인스턴스가 올바른 프레임으로 생성됩니다. . 인터페이스 빌더에 들어간 적이없는 것 같습니다. 이것의 원인이 무엇일까요? 나는 이것에 관해 많은 게시물을 보았고, 주로 프로그램 적으로 뷰를 생성하고 'initWithFrame :'과 관련된 문제를 나타냅니다. 하지만 그 방법과 관련이 없으며 인터페이스 빌더/XIB 커플을 사용하고 싶습니다. 프로그래밍 방식으로 뷰 컨트롤러를 작성하라는 조언을 제발하지 마십시오. 그 원인은 무엇일까요?
감사합니다.
Can.
업데이트 :-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
도 어떤 식 으로든 호출되지 않았 음을 확인할 수 있습니다.