2012-11-07 67 views
0

我试图使用UIPinchGestureRecognizer来调整UIImageView的大小。应用一个简单的CGAffineTransform工程,但它基于左上角调整大小,而我想根据图像的中心调整大小。我可以实现用下面的代码Choppy UIImageView使用UIPinchGestureRecognizer调整大小

-(IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer 
{ 
UIImageView *view = [recognizer view]; 
float scale = recognizer.scale; 
view.bounds = CGRectMake(0, 0, view.bounds.size.height*scale, view.bounds.size.width*scale); 
recognizer.scale = 1; 
} 

的问题是,当我使用此代码,图像获取所有出问题和波涛汹涌,因为它重新调整所期望的结果。任何想法为什么这可能会发生?

回答

0

你可能会这样做的困难。建议您考虑将UIImageView添加到UIScrollView,并让滚动视图为您完成工作。例如:

页眉与UIScrollViewDelegate

#import <UIKit/UIKit.h> 

@interface MyScrollViewController : UIViewController <UIScrollViewDelegate> 

@end 

实现显示滚动视图,允许设置缩放:

#import "MyScrollViewController.h" 

#define MIN_ZOOM_FACTOR 1 
#define MAX_ZOOM_FACTOR 5 

@interface MyScrollViewController() { 
    UIScrollView *scrollView; 
    UIImageView *imageView; 
} 

@end 

@implementation MyScrollViewController 

-(void)viewWillAppear:(BOOL)animated{ 
    [super viewWillAppear:animated]; 

    scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame]; 
    scrollView.backgroundColor = [UIColor clearColor]; 
    scrollView.delegate = self; 
    scrollView.contentSize = CGSizeMake(self.view.bounds.size.width * MAX_ZOOM_FACTOR, 
            self.view.bounds.size.height * MAX_ZOOM_FACTOR); 
    scrollView.minimumZoomScale = MIN_ZOOM_FACTOR; 
    scrollView.maximumZoomScale = MAX_ZOOM_FACTOR; 

    imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"your_image_name.png"]]; 
    imageView.frame = scrollView.frame; 
    imageView.contentMode = UIViewContentModeScaleAspectFit; 

    [scrollView addSubview:imageView]; 
} 

#pragma mark - Scroll view delegate methods 

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

@end 

如果你想平移时,需要了解和缩放发生,什么缩放比例等,实施附加的UIScrollViewDelegate方法。例如:

-(void)scrollViewDidZoom:(UIScrollView *)zoomedScrollingView{ 
    float zoomScale = scrollView.zoomScale; 
    // Do something with zoomScale... 
} 
+0

这可以工作,它似乎基于中心位置调整大小,但是当调整大小结束时,它会捕捉到左上角。即使当我使用'scrollViewDidEndZooming'中的代码将帧重置为与之前相同的位置时,它仍然会捕捉到左上角的第一个 –

相关问题