【问题标题】:iOS show UIImage full screen with zooming (pinch and double tap) enablediOS 显示 UIImage 全屏并启用缩放(捏合和双击)
【发布时间】:2014-03-02 00:56:46
【问题描述】:

我有一个UIImage 使用UIImagePickerController 从相机捕获。

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

我在UIImageView 中显示捕获的图像:

self.imageView.contentMode = UIViewContentModeScaleAspectFill;

这会使图像全屏显示。但是我如何实现缩放。我需要使用手势识别器从头开始吗?或者,也许有一个默认的图像显示视图,其中包含我不知道的所有实现?

【问题讨论】:

标签: ios iphone objective-c uiimageview uiimage


【解决方案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];
}

【讨论】:

  • 除了在ViewDidLoad中设置myscrollview的代理,还需要在interface builder中设置吗?因为现在什么都没有发生。如果是这样,怎么做?我看不到。
  • no 如果你是在 viewDidLoad 中设置,那么不需要这样做。
  • 还需要将这些添加到 viewDidLoad 中:“ self.scrollView.minimumZoomScale = 1; self.scrollView.maximumZoomScale = 6.0; self.scrollView.contentSize = self.imageView.frame.size; self. scrollView.delegate = self;"
【解决方案2】:

这很容易实现:

- (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer;

然后:

- (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer {    
recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
recognizer.scale = 1;    
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多