如何让 viewForZoomingInScrollView 在 Xcode 中跨多个 UIViewControllers 工作?
Posted
技术标签:
【中文标题】如何让 viewForZoomingInScrollView 在 Xcode 中跨多个 UIViewControllers 工作?【英文标题】:How to get viewForZoomingInScrollView to work across multiple UIViewControllers in Xcode? 【发布时间】:2017-02-18 02:52:37 【问题描述】:我对 Xcode 比较陌生,并且正在使用 Objective C 制作一个应用程序,其中包含多个 viewControllers,每个 viewControllers 都有一个 UIScrollView,其中包含一个可以缩放和滚动的 UIImage。
此代码适用于第一张图像(皮节),但我不知道如何调整 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;
感谢任何帮助!
【问题讨论】:
【参考方案1】:您需要根据请求的滚动视图返回正确的视图。委托模式中的每个方法都传递了对方法调用发起者的引用,因此您的委托实现可以不同地处理它。在这种情况下,委托方法调用的发起者是滚动视图:
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
if (scrollView == dermatomeScrollView)
return dermatomesImageView;
return anatomicPlanesImageView;
如果您添加更多滚动视图,则必须进一步扩展此方法。
【讨论】:
谢谢!这正是我一直在寻找的东西(现在我看到它很直观,但我没有想到)。 太棒了!很高兴它对你有效!不要忘记接受我的回答。 :) 完成。如果其他人遇到这个问题,为了防止“控件可能到达非无效函数的结尾”错误,添加一个 else return nil; 子句 我不确定您会在哪里看到该错误消息,因为我发布的 sn-p 中的两个代码路径都以return
结尾。 (对于任何可能对您的评论感到困惑的人。?)以上是关于如何让 viewForZoomingInScrollView 在 Xcode 中跨多个 UIViewControllers 工作?的主要内容,如果未能解决你的问题,请参考以下文章