没有 InterfaceBuilder 的 UIScrollview 缩放实现
Posted
技术标签:
【中文标题】没有 InterfaceBuilder 的 UIScrollview 缩放实现【英文标题】:UIScrollview Zoom implementation without InterfaceBuilder 【发布时间】:2013-02-24 04:26:58 【问题描述】:我无法放大UIScrollView
。所以问题是平移工作正常。但是,捏合和缩放不起作用。我假设的原因是我没有代表。
我的方法:
我尝试使用委托,我想出的唯一解决方案是scrollView.delegate=self
我知道我需要在ViewController.h
中包含一些内容,但我不知道如何输入@property UIScrollView *scrollView;
然后将其连接到缩放功能。
我相信我走在正确的轨道上,但非常感谢有关在哪里连接的建议。
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
ViewController.m
@implementation ViewController
- (void)viewDidLoad
[super viewDidLoad];
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:
CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
scrollView.delegate = self;
CGSize containerSize = CGSizeMake(1280, 1280);
UIView *containerView = [[UIView alloc] initWithFrame:(CGRect) .origin=CGPointMake(0.0f, 0.0f), .size=containerSize];
containerView.backgroundColor = [UIColor grayColor ];
[scrollView addSubview:containerView];
// Set up our custom view hierarchy
UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 640.0f, 80.0f)];
redView.backgroundColor = [UIColor redColor];
[containerView addSubview:redView];
UIView *blueView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 560.0f, 640.0f, 80.0f)];
blueView.backgroundColor = [UIColor blueColor];
[containerView addSubview:blueView];
UIView *greenView = [[UIView alloc] initWithFrame:CGRectMake(160.0f, 160.0f, 320.0f, 320.0f)];
greenView.backgroundColor = [UIColor greenColor];
[containerView addSubview:greenView];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"slow.png"]];
imageView.center = CGPointMake(320.0f, 320.0f);
[containerView addSubview:imageView];
scrollView.panGestureRecognizer.minimumNumberOfTouches=2;
CGSize containerSize2 = CGSizeMake(640, 640);
scrollView.contentSize=containerSize2;
CGRect viewRect = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, self.view.bounds.size.width, self.view.bounds.size.height);
[self.view addSubview:scrollView];
- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView
// Return the view that we want to zoom
return self.containerView; //This gives error.
【问题讨论】:
return self.containerView; //This gives error.
什么错误?
【参考方案1】:
问题很可能是您没有添加viewForZoomingInScrollView
。
UIScrollView 类可以有一个必须采用 UIScrollViewDelegate 协议的委托。要使缩放和平移工作,代理必须同时实现 viewForZoomingInScrollView: 和 scrollViewDidEndZooming:withView:atScale:;另外,最大(maximumZoomScale)和最小(minimumZoomScale)缩放比例必须不同。
所以添加这个:
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
从文档here了解更多信息
【讨论】:
raywenderlich.com/10518/… 在本教程中,作者没有实现任何这些东西。但是,他的代码运行良好。 在该页面中搜索“viewForZoomingInScrollView”。您会在页面下方大约 1/3 处看到它。 我确实有这个。我把它贴在问题的底部。【参考方案2】:只需提供适当的缩放比例即可。
scrollView.maximumZoomScale = 2.0; //Anything greater than 1.0 will allow you to zoom in
【讨论】:
【参考方案3】:解决了我的问题的答案: 在 ViewRect() 之后的 viewDidLoad() 中添加这段代码
CGRect viewRect = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, self.view.bounds.size.width, self.view.bounds.size.height);
CGRect scrollViewFrame = scrollView.frame;
CGFloat scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width;
CGFloat scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height;
CGFloat minScale = MIN(scaleWidth, scaleHeight);
scrollView.minimumZoomScale = minScale;
scrollView.maximumZoomScale = 1.0f;
scrollView.zoomScale = minScale;
viewController.h 应该是这样的:
@interface ViewController ()
@property UIView *containerView;
@end
@implementation ViewController
@synthesize containerView = _containerView;
【讨论】:
以上是关于没有 InterfaceBuilder 的 UIScrollview 缩放实现的主要内容,如果未能解决你的问题,请参考以下文章
没有 InterfaceBuilder 的 UIScrollview 缩放实现
UIS R170 G2安装centos启动报Attempt to access block outside partition
为啥我的自定义类没有出现在 Interface Builder 的下拉列表中?