如何在 UIScrollView 中实现捏合以关闭功能?
Posted
技术标签:
【中文标题】如何在 UIScrollView 中实现捏合以关闭功能?【英文标题】:How would I implement pinch to close functionality in UIScrollView? 【发布时间】:2014-02-08 21:49:33 【问题描述】:当用户通过张开将图像放大到足够远,然后释放时,我希望它关闭 UIImageView/滚动视图,基本上退出图片查看器。
我该怎么做呢? scrollViewDidEndZooming
被调用 它动画回到原位,所以我不能使用它,其他委托方法似乎都没有帮助。
【问题讨论】:
【参考方案1】:我已经为我的一个应用程序创建了这种效果,不要忘记设置滚动视图的委托。 您需要使用捏合手势更新私有方法(仅此而已)
.h 文件的代码
#import <UIKit/UIKit.h>
@interface ImageViewerController : UIViewController<UIScrollViewDelegate>
// The scroll view used for zooming.
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
// The image view that displays the image.
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
// The image that will be shown.
@property (strong, nonatomic) NSString *imageUrlString;
@end
.m 的代码
#import "ImageViewerController.h"
@interface HNImageViewerController ()
- (IBAction)handleSingleTap:(UIButton*)tapGestureRecognizer;
@end
@implementation ImageViewerController
- (void)viewDidLoad
[super viewDidLoad];
[self.imageView setImage:[UIImage imageNamed:@"placeholder-image"]];
self.scrollView.delegate=self;
- (BOOL)prefersStatusBarHidden
return YES;
#pragma mark - UIScrollViewDelegate methods
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
return self.imageView;
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
if (self.scrollView.zoomScale == self.scrollView.minimumZoomScale)
[self dismissViewControllerAnimated:YES completion:nil];
#pragma mark - Private methods
- (IBAction)handleSingleTap:(UIButton *)tapGestureRecognizer
[self dismissViewControllerAnimated:YES completion:nil];
【讨论】:
您不必等到缩放“完成”,在缩放过程中重复调用委托方法“scrollViewDidZoom:”——您可以关闭等zoomScale 值符合您的标准。 是的,正确。此代码用于向下滑动关闭。以上是关于如何在 UIScrollView 中实现捏合以关闭功能?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UIScrollView 中实现可拖动的 UIView 子类?
如何在 UIScrollView 或等效中实现 touchesEnded
如何在 ListView 中实现 Android 4.0 之类的滑动以关闭功能?