捏时图像伸展

时间:2014-04-02 04:39:21

标签: ios objective-c uiimageview uigesturerecognizer uipinchgesturerecognizer

我从远程服务器获取图像并在UIImageView中显示,然后对此imageview进行捏合手势。但是当我捏图像时,我正在进行图像拉伸。它失去了原有的分辨率和质量。

mmageView=[[UIImageView alloc]initWithFrame:CGRectMake(50,50,150,150)];
 [self.view addSubview:mmageView];

 UIPinchGestureRecognizer *dbpinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(dbhandlePinch:)];
 [mmageView addGestureRecognizer:dbpinchGesture];

UIPinchGesture:

 -(void)dbhandlePinch:(UIPinchGestureRecognizer*)recognizer {

 if([recognizer state] == UIGestureRecognizerStateBegan) {
 // Reset the last scale, necessary if there are multiple objects with different scales
 LastScale = [recognizer scale];
 }

 if ([recognizer state] == UIGestureRecognizerStateBegan ||
 [recognizer state] == UIGestureRecognizerStateChanged) {

 CGFloat currentScale = [[[recognizer view].layer valueForKeyPath:@"transform.scale"] floatValue];

 // Constants to adjust the max/min values of zoom
 // const CGFloat kMaxScale = 2.0;
 const CGFloat kMinScale = 0.8;

 CGFloat newScale = 1 -  (LastScale - [recognizer scale]);
 // newScale = MIN(newScale, kMaxScale / currentScale);
 newScale = MAX(newScale, kMinScale / currentScale);
 CGAffineTransform transform = CGAffineTransformScale([[recognizer view] transform], newScale, newScale);
 [recognizer view].transform = transform;

 LastScale = [recognizer scale];  // Store the previous scale factor for the next pinch gesture call
 }

 }

2 个答案:

答案 0 :(得分:1)

要进行缩放缩放,请在scrollView中导入imageView并导入UIScrollViewDelegate

- (void)viewDidLoad
{
    [super viewDidLoad];

    //for pinch gesture
    _scrollView.minimumZoomScale = 0.5;
    _scrollView.maximumZoomScale = 6.0;
    _scrollView.contentSize = CGSizeMake(_imageView.frame.size.width, _imageView.frame.size.height);
    _scrollView.delegate = self;

}
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return _imageView;
}

答案 1 :(得分:0)

UIScrollView支持轻松缩放的捏合手势。 Apple Documentation中更好的解决方案。