2013-05-10 1 views
0

인터페이스 작성기에서 XIB 파일로 사용자 정의보기 컨트롤러를 디자인하고 있으며 내 View Controller에 추가 할 사용자 지정 UIView 하위 클래스가 있습니다.XIB의 UIView 하위 클래스가 표시되지 않습니다. (drawRect : never called)

interface builder

TonerEffectButtonView 클래스 UIView의 서브 클래스 (그리고 UIButton 함께 할 수 없다)와 여기 내 코드입니다 : 여기 뷰 컨트롤러에 내 사용자 정의보기를 넣어 한 방법이다

내가 XIB를 통해 뷰를 만드는거야으로
- (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도 어떤 식 으로든 호출되지 않았 음을 확인할 수 있습니다.

답변

0

좋아, 답을 찾았습니다. 첫째, 프로그램으로 다른 인스턴스를 추가하려고 시도했습니다. 그리고 원래 인스턴스에 W + H로 설정된 반면 자동 마스크가 없음으로 설정되어 있음을 발견했습니다. 이 실마리는 실제로 내 GPUImageView 인스턴스를 내 사용자 정의보기에 하위보기로 추가하는 것을 잊어 버리는 것을 깨닫게했습니다. 나는 그것을 추가했고, 효과가 있었다.

관련 문제