2010-02-06 3 views
0

UIScrollView에서 이미지 확대/축소를 지원하려면 다음과 같이 MyController를 UIScrollViewDelegate와 일치시켜야한다고 생각했습니다. 컴파일러가 다음 경고 메시지를 생성하더라도 UIScrollViewDelegate를 준수하지 않으면 정상적으로 작동합니다.
경고 : 클래스 'MyController에'는 'UIScrollViewDelegate'프로토콜

는 헤더 파일에 UIScrollViewDelegate을 준수 할 의무가 없습니다를 구현하지 않습니다?
준수하지 않은 경우 부작용이 있습니까? 이와왜 UIScrollViewDelegate를 준수하지 않고 UIScrollView를 확대/축소 할 수 있습니까?

[scrollView setDelegate:self]; 

:

//@interface MyController : UIViewController <UIScrollViewDelegate> 
@interface MyController : UIViewController 
{ 
    UIScrollView *scrollView; 
    UIImageView *imageView; 
} 
@end 

@implementation HelloController 
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return imageView; 
} 

- (void)loadView 
{ 
    UIImage *img = [UIImage imageNamed:@"foo.png"]; 
    imageView = [[UIImageView alloc] initWithImage:img]; 
    imageView.userInteractionEnabled = NO; 

    scrollView = [[UIScrollView alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]]; 
    [scrollView setScrollEnabled:YES]; 
    [scrollView setContentSize:[imageView size]]; 
    [scrollView setMaximumZoomScale:2.0f]; 
    [scrollView setMinimumZoomScale:0.5f]; 
    [scrollView setDelegate:self]; 

    [scrollView addSubview:imageView]; 

    self.view = scrollView; 
    [scrollView release]; 
} 
@end 

답변

0

클래스가 실제로 대리자 메서드를 구현하는 경우, 당신은 오류를받지 않습니다.

프로토콜 준수는이 클래스가 이러한 메소드를 구현한다는 것을 컴파일러에 알립니다. 따라서이를 생략하면 UIScrollView.delegate을 필요에 따라 UIScrollViewDelegate 프로토콜을 따르지 않는 클래스에 할당하므로 컴파일러에서 경고를 생성합니다.

+0

답장을 보내 주셔서 감사합니다. 그건 나에게 의미가있다. 그러나 Interface Builder를 통해 델리게이트를 할당하면 Interface Builder가 전혀 불평하지 않습니다. 재미있는 행동입니다. 어쨌든, 다시 한번 감사드립니다! – tomute

1

이 줄을 바꾸기 나는 컴파일러 구현 한 것을 인식되지 않는 이유를 모르는, 아직

[scrollView setDelegate:(id<UIScrollViewDelegate>)self]; 

UIScrollViewDelegate

편집 : 컴파일러를 만족시키기 위해 다음 프로토콜을 구현할 수도 있습니다. 당신의하는 .m 파일에 정의 된 개인 범주 : 필요한 때 실제로 호출 할 수 있기 때문에

@interface FormModel() <UIScrollViewDelegate> 
@end 
+0

죄송합니다. 제 질문을 잘 설명하지 못했습니다. 내 코드를 조금 수정했지만 내 질문에 왜이 코드는 UIScrollViewDelegate 헤더 파일을 준수하지 않고 잘 작동합니다. – tomute

+0

아, 편집을 놓쳤습니다. 빈 파일을 .m 파일에 추가 할 수도 있습니다 : @interface FormModel() @end – rpetrich

관련 문제