如何让viewForZoomingInScrollView在Xcode中的多个UIViewControllers上工作?

问题描述:

我对Xcode相对比较陌生,并且正在Objective C中制作一个应用程序的过程中,它带有几个viewControllers,每个viewController都有一个包含单个UIImage的UIScrollView,可以放大和滚动。如何让viewForZoomingInScrollView在Xcode中的多个UIViewControllers上工作?

这段代码适用于第一张图片(dermatomes),但我无法弄清楚如何调整UIView以在第二张图片(anatomicPlanes)上启用缩放和滚动功能。目前第二个图像正确地导入到第二个UIScrollView,但是当我尝试缩放它时,它只是向下跳动并向右移动,并保持静态。

UIScrollViews的大小是使用Interface Builder设置的,没有问题。

viewController.h:

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController <UIScrollViewDelegate> { 

    IBOutlet UIScrollView *dermatomeScrollView; 
    UIImageView *dermatomesImageView; 
    IBOutlet UIScrollView *anatomicPlaneScrollView; 
    UIImageView *anatomicPlanesImageView; 
} 

@property (strong, nonatomic) IBOutlet UIScrollView *dermatomeScrollView; 

@property (strong, nonatomic) IBOutlet UIImageView *dermatomesImageView; 

@property (strong, nonatomic) IBOutlet UIImageView *anatomicPlanesImageView; 

@property (strong, nonatomic) IBOutlet UIScrollView *anatomicPlaneScrollView; 

@end 

viewController.m

#import "ViewController.h" 
@interface ViewController() 

@end 

@implementation ViewController 

@synthesize dermatomeScrollView, anatomicPlanesImageView, dermatomesImageView, anatomicPlaneScrollView; 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 
    return dermatomesImageView; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIImageView *dermatomes = [[UIImageView alloc] 
            initWithImage:[UIImage imageNamed:@"dermatomes.jpg"]]; 

    self.dermatomesImageView = dermatomes; 
    dermatomeScrollView. maximumZoomScale = 1.2; 
    dermatomeScrollView. minimumZoomScale = 0.4; 
    dermatomeScrollView. delegate = self; 
    [dermatomeScrollView addSubview:dermatomesImageView]; 
    dermatomeScrollView.zoomScale = 0.6; 

    UIImageView *planes = [[UIImageView alloc] 
           initWithImage:[UIImage imageNamed:@"anatomic planes.jpg"]]; 
    self.anatomicPlanesImageView = planes; 
    anatomicPlaneScrollView. maximumZoomScale = 1.2; 
    anatomicPlaneScrollView. minimumZoomScale = 0.4; 
    anatomicPlaneScrollView. delegate = self; 
    [anatomicPlaneScrollView addSubview:anatomicPlanesImageView]; 
    anatomicPlaneScrollView.zoomScale = 0.6; 
} 

任何帮助表示赞赏!

您需要根据请求的滚动视图返回正确的视图。委托模式中的每个方法都会传递一个对方法调用的创建者的引用,所以您的委托实现可以以不同的方式处理它。在这种情况下,委托方法调用的鼻祖是滚动视图:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 
    if (scrollView == dermatomeScrollView) { 
     return dermatomesImageView; 
    } 

    return anatomicPlanesImageView; 
} 

如果添加了更多scrollviews,你就必须进一步扩大这种方法。

+0

谢谢!这正是我一直在寻找的东西(直觉现在我明白了,但它不会发生在我身上)。 – Nate

+0

太棒了!很高兴它对你有效!不要忘记接受我的答案。 :) –

+0

完成。如果有人遇到这个问题,为了防止“控制可能会达到非void函数结束”错误,请添加一个else {return nil;}子句 – Nate