2010-02-06 27 views
0

爲了支持縮放UIScrollView中的圖像,我想我必須將MyController與UIScrollViewDelegate一致,如下所示。但是,即使編譯器生成以下警告消息,它也能正常工作而不符合UIScrollViewDelegate。
警告:類「myController的」不執行「UIScrollViewDelegate」協議

是不是強制性的,以符合UIScrollViewDelegate在頭文件?
如果我忘記符合,是否有任何副作用?
爲什麼我可以支持縮放UIScrollView而不符合UIScrollViewDelegate?

//@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 2010-02-06 17:17:15

1

替換此行:

[scrollView setDelegate:self]; 

與此:

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

不過,我不知道爲什麼編譯器不能識別您已實現UIScrollViewDelegate

編輯:爲了滿足編譯器,你也可以在協議上實現在.m文件中定義的私有類別:

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

對不起,我無法很好地解釋我的問題。我修改了一下我的代碼,但我的問題是爲什麼這個代碼工作正常,而不符合頭文件中的UIScrollViewDelegate。 – tomute 2010-02-06 10:34:44

+0

啊,我錯過了你的編輯。您還可以將一個空類別添加到.m文件中:@interface FormModel() @end – rpetrich 2010-02-06 10:53:52

相關問題