如何在 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 之类的滑动以关闭功能?

如何在 C# 中实现串行端口通信以控制现金存款机 [关闭]

在 authManger.Login wapper 函数中实现关闭以进行 Alamofire 身份验证?

如何在 Spring MVC 3 中实现分页 [关闭]