如何让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,你就必须进一步扩大这种方法。
谢谢!这正是我一直在寻找的东西(直觉现在我明白了,但它不会发生在我身上)。 – Nate
太棒了!很高兴它对你有效!不要忘记接受我的答案。 :) –
完成。如果有人遇到这个问题,为了防止“控制可能会达到非void函数结束”错误,请添加一个else {return nil;}子句 – Nate