我在使用UIScrollView的缩放功能时遇到问题。它根本不起作用。我读过类似的文章,其他人使用的修复似乎都不适合我。我的viewController引用了UIScrollViewDelegate,我有一个UIScrollView的实例变量,我声明了我的子视图是UIScrollView的委托对象,并且我有(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
的实现。这是我的loadView函数:
(void)loadView
{
CGRect frame = CGRectMake(0, 0, 320, 480);
scrollView = [[UIScrollView alloc] initWithFrame:frame];
[scrollView setScrollEnabled:YES];
CGRect reallyBigRect;
reallyBigRect.origin = CGPointZero;
reallyBigRect.size.width = frame.size.width * 2.0;
reallyBigRect.size.height = frame.size.height * 2.0;
[scrollView setContentSize:reallyBigRect.size];
CGPoint offset;
offset.x = frame.size.width * 0.5;
offset.y = frame.size.height * 0.5;
[scrollView setContentOffset:offset];
[scrollView setMinimumZoomScale:1];
[scrollView setMaximumZoomScale:5];
[scrollView setUserInteractionEnabled:YES];
self.scrollView.delegate = self;
self.view = scrollView;
views = [[HypnosisView alloc] initWithFrame:reallyBigRect];
[scrollView addSubview:views];
[self.view setBackgroundColor:[UIColor clearColor]];
}
此代码使我可以正常滚动,但不存在缩放。
希望能收到某人的来信,戴夫
您是否尝试实现scrollViewDidEndZooming:withView:atScale:
?
来自Apple's UIScrollView documentation:
滚动视图还可以处理内容的缩放和平移。当用户做出放大或缩小手势时,滚动视图会调整内容的偏移量和比例。当手势结束时,管理内容视图的对象应根据需要更新内容的子视图。 (请注意,手势可能会结束,而手指可能仍会向下。)在手势操作过程中,滚动视图不会向子视图发送任何跟踪调用。
UIScrollView
类可以具有必须采用UIScrollViewDelegate
协议的委托。 为了使缩放和平移正常工作,委托必须实现viewForZoomingInScrollView:
和scrollViewDidEndZooming:withView:atScale:;此外,最大(maximumZoomScale
)和最小(minimumZoomScale
)缩放比例必须不同。
要启用缩放,需要做两件事:
使用UIScrollViewDelegate
协议并实现viewForZoomingInScrollView:UIScrollView -> UIView?
。将滚动条委托设置为实现类。这期望UIView的返回被缩放。所以一个简单的例子是:
@IBOutlet var myZoomableImageView: UIImageView?`
override func viewDidLoad() {
myScrollView?.delegate = self
}
func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
return myZoomableImageView
}
使用UIScrollView.minimumZoomScale
和UIScrollView.maximumZoomScale
设置滚动视图的最大和最小缩放,如下所示:
myScrollView?.minimumZoomScale = 1.0
myScrollView?.maximumZoomScale = 3.0
`