2013-06-10 2 views
0

저는 "iPad 및 iPhone 응용 프로그램 개발"과정을 배우는 초보자입니다. , 나는 그것이 자바 스크립트 이벤트 리스너 비슷한 수 있습니다 궁금해 : - "(FaceView *) faceView (무효) setFaceView"강의 5의 데모에서 우리는 방법이개체 C의 UIView 초기 표시 메커니즘은 무엇입니까

#import "HappinessViewController.h" 
#import "FaceView.h" 

@interface HappinessViewController() 
@property (nonatomic, weak) IBOutlet FaceView *faceView; 
@end 

@implementation HappinessViewController 

@synthesize happiness = _happiness; 
@synthesize faceView = _faceView; 


-(void) setHappiness:(int)happiness 
{ 
    _happiness = happiness; 
    [self.faceView setNeedsDisplay]; 
} 


-(void)setFaceView:(FaceView *)faceView 
{ 
    _faceView = faceView; 
    NSLog(@"set FaceView invoked"); 
    [self.faceView addGestureRecognizer:[[UIPinchGestureRecognizer alloc]   
initWithTarget:self.faceView action:@selector(pinch:)]]; 
} 

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
{ 
    return YES; 
} 

@end 

같은 일부 코드가 있습니다. 그러나 이벤트 리스너가 바인딩되었을 때 을 알고 싶습니다. 그래서 "NSLog (@"FaceView 호출 ") 설정;"; 이 세터 기능은 일단 내가이 프로그램을 실행하고 나면 매우 혼란 스럽다. 그래서 "setFaceView"가 맨 처음에 어떻게 호출되는지 궁금합니다.

그런데 FaceView는 UIView의 하위 클래스이며 faceView는 FaceView 클래스의 유일한 인스턴스입니다. 또한 "NSLog (@"행복을 불러 일으켰다 ")를 추가하려고합니다." 메소드 setHappiness에서이 은 프로그램 시작 부분에 호출되지 않습니다.

답변

1

NIB 또는 스토리 보드의 뷰에 바인딩 된 faceView가있는 경우 NIB가로드되거나 스토리 컨트롤러가보기 컨트롤러를로드 할 때 -setFaceView:이 호출됩니다.

-setFaceView:은 faceView 속성의 설정 도구입니다. self.faceView = …이 완료되면 호출되는 것은 -setFaceView:입니다.

+0

감사합니다. 이것은 faceView가 IBOutlet이기 때문에 가능합니다. 약한 포인터입니다. 먼저 클래스 FaceView가 인스턴스화 된 다음이를 가리키는 포인터 인 faceView를 설정합니다. 내가 맞 췄나? – zhouwubai

+0

@zhouwubai 네, 인터페이스 뷰어는 IBOutlet으로 표시 되었기 때문에 인터페이스 빌더 (IB)에서 설정할 수 있습니다. 그것은 약한되는 한 self.faceView 자체 뷰로 추가 될 때 self.view에 의해 유지됩니다, 그래서 그것을 강력한 이유가 없습니다. self.faceView가 제거되어 self.view에 다시 추가 되었다면 강해야합니다. –