代码之家  ›  专栏  ›  技术社区  ›  tomute

为什么我可以支持缩放uiScrollView而不符合uiScrollViewDelegate?

  •  0
  • tomute  · 技术社区  · 14 年前

    为了支持在uiScrollView中缩放图像,我认为我必须使myController符合uiScrollView委托,如下所示。但它在不符合uiscrollViewDelegate的情况下工作正常,即使编译器生成以下警告消息。
    警告:类“MyController”未实现“UIScrollViewDelegate”协议

    是否必须符合头文件中的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
    
    2 回复  |  直到 14 年前
        1
  •  0
  •   Dimitris    14 年前

    如果您的类实际上实现了委托方法,您将不会得到任何错误,因为它们在需要时将被实际调用。

    遵守协议只会告诉编译器这个类实现了那些方法。因此,通过省略它,编译器将生成一个警告,因为您将 UIScrollView.delegate 一个似乎不符合 UIScrollViewDelegate 按要求制定方案。

        2
  •  1
  •   rpetrich    14 年前

    替换此行:

    [scrollView setDelegate:self];
    

    用这个:

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

    不过,我不知道编译器为什么不认识到您已经实现了 UIScrollViewDelegate

    编辑:为了满足编译器的要求,还可以在.m文件中定义的私有类别上实现协议:

    @interface FormModel () <UIScrollViewDelegate>
    @end