iOS显示UIImage全屏,启用缩放(捏合和双击)

Zvi*_*Bar 3 iphone objective-c uiimageview uiimage ios

我有一个UIImage从相机捕获UIImagePickerController.

现在,在用户点击它之后,我希望它能够全屏显示,并能够使用捏合手势和双击手势来放大和缩小特定区域.换句话说,我想模仿ios的默认图像浏览器.

我用以下方式显示捕获的图像UIImageView:

self.imageView.contentMode = UIViewContentModeScaleAspectFill;
Run Code Online (Sandbox Code Playgroud)

这使得图像全屏显示.但是我该如何实现缩放.我需要使用手势识别器从头开始吗?或者可能有一个默认的图像显示视图,其中所有实现的我都不知道?

Paw*_*Rai 10

我为我的一个应用程序创建了这个效果,别忘了设置你的scrollview的委托.

.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
Run Code Online (Sandbox Code Playgroud)

.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];
}
Run Code Online (Sandbox Code Playgroud)

  • 需要将它们也添加到viewDidLoad中:“ self.scrollView.minimumZoomScale = 1; self.scrollView.maximumZoomScale = 6.0; self.scrollView.contentSize = self.imageView.frame.size; self.scrollView.delegate = self;” (2认同)