iOS 开发中的点点滴滴

UIScrollView 禁止缩放

2020-04-28  本文已影响0人  路人甲_kbb
UIScrollView 禁止缩放,因为UIScrollView 没有禁止缩放的属性,这边整理一下大概的几种方法

1、检查设置minimumZoomScalemaximumZoomScale;根据the docs

maximumZoomScale must be greater than minimumZoomScale for zooming to be enabled

因此,将值设置为相同应禁用缩放

-(void)lockZoom
{
    maximumZoomScale = self.scrollView.maximumZoomScale;
    minimumZoomScale = self.scrollView.minimumZoomScale;
self.scrollView.maximumZoomScale = 1.0;
    self.scrollView.minimumZoomScale = 1.0;
}
-(void)unlockZoom
{
self.scrollView.maximumZoomScale = maximumZoomScale;
    self.scrollView.minimumZoomScale = minimumZoomScale;
}

2、您还可以在UIScrollViewDelegate中将“nil”作为缩放视图返回:

- (UIView *) viewForZoomingInScrollView:(UIScrollView *) scrollView
{
    return canZoom?view:nil;
}

3、如果你只想禁用缩放手势缩放,下面的代码可以解决问题

scrollView.pinchGestureRecognizer?.requireGestureRecognizerToFail(scrollView.panGestureRecognizer)

4、如果要禁用用户缩放手势的功能,那么在iOS 5及更高版本中,您可以禁用捏合手势。这仍然允许您从代码控制滚动视图...

scrollView.pinchGestureRecognizer.enabled = NO;

同样适用

scrollView.panGestureRecognizer.enabled = NO;

必须在- (void)viewDidAppear:(BOOL)animated或更高版本中调用此方法,否则系统会将其重置为已启用。
5、我知道这是一个非常古老的问题,但我的目的略有不同。 我希望能够轻松判断是否实际启用/禁用了缩放,而不依赖于scrollView.minimumZoomScale == scrollView.maximumZoomScale之间的比较,这可能无法反映缩放是否实际启用/禁用。 所以我这样做了

// .h
@property (assign, nonatomic, getter=isZoomEnabled) BOOL zoomEnabled;
// .m
@synthesize zoomEnabled = _zoomEnabled;
- (void)setZoomEnabled:(BOOL)zoomEnabled;
{
  _zoomEnabled = zoomEnabled;
UIScrollView *scrollView = self.scrollView;
if (zoomEnabled) {
    scrollView.minimumZoomScale = self.minimumZoomScale;
    scrollView.maximumZoomScale = self.maximumZoomScale;
  } else {
    scrollView.minimumZoomScale = 0.0f;
    scrollView.maximumZoomScale = 0.0f;
  }
}

self.minimumZoomScale和self.maximumZoomScale的值在UIScrollView配置时设置。 这使我能够设置/询问是否启用了缩放。

myViewController.zoomEnabled = YES;
myViewController.isZoomEnabled;

原贴地址:https://oomake.com/question/302778如有侵权,请及时告知,会立即删帖。

上一篇下一篇

猜你喜欢

热点阅读