2014-03-13 72 views
5

我有一個UIImageView。我需要捏縮放。捏放大圖像查看器

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 90, 320, 38)]; 
[imageView setImage:[UIImage imageNamed:@"accesspanel.png"]]; 
[self.view addSubview: imageView]; 
+0

的可能重複的[如何放大/縮小一個的UIImage當對象用戶捏屏幕?](http://stackoverflow.com/問題/ 500027 /如何縮小 - 出 - - - uiimage - 對象 - 當用戶捏屏幕) – CRDave

+0

http://stackoverflow.com/questions/19840507/how-i-can-pinch-zoom -uiimage-without-use-uiimageview – CRDave

+0

http://stackoverflow.com/questions/21579882/ios-show-uiimage-full-screen-with-zooming-pinc h和雙擊啓用 – CRDave

回答

7

你可以在scrollview中添加imageview,並可以使用Scrollview代理來實現此目的

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 

{ 

    return self.imageView; 

} 
- (void)viewDidLoad { 

    [super viewDidLoad]; 

    self.scrollView.minimumZoomScale=0.5; 

    self.scrollView.maximumZoomScale=6.0; 

    self.scrollView.contentSize=CGSizeMake(1280, 960); 

    self.scrollView.delegate=self; 

} 
5

首先--->添加縮放手勢,以你的形象景觀 - :

UIPinchGestureRecognizer *pgr = [[UIPinchGestureRecognizer alloc] 
    initWithTarget:self action:@selector(handlePinchGesture:)]; 
pgr.delegate = self; 
[imageView addGestureRecognizer:pgr]; 

二--->實施捏合手勢 - :

- (void)handlePinchGesture:(UIPinchGestureRecognizer *)gestureRecognizer { 

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

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

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

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

     CGFloat newScale = 1 - (lastScale - [gestureRecognizer scale]); // new scale is in the range (0-1) 
     newScale = MIN(newScale, kMaxScale/currentScale); 
     newScale = MAX(newScale, kMinScale/currentScale); 
     CGAffineTransform transform = CGAffineTransformScale([[gestureRecognizer view] transform], newScale, newScale); 
     [gestureRecognizer view].transform = transform; 

     lastScale = [gestureRecognizer scale]; // Store the previous. scale factor for the next pinch gesture call 
     } 
} 
+0

謝謝,但一個錯誤即將到來。錯誤是(用戶未聲明的標識符'最後一個比例')我應該怎麼做。 – janagowtham

+0

在.m文件中聲明全局變量「lastScale」,如CGFloat lastScale; – Vizllx

+0

記住,你必須設置imageview用戶intraction真[imageView setUserInteractionEnabled:YES]; – nova

1
pinchGestureRecognizer=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGestureDetected:)]; 
[pinchGestureRecognizer setDelegate:self]; 
[_third_imagevie addGestureRecognizer:pinchGestureRecognizer]; 

//

- (void)pinchGestureDetected:(UIPinchGestureRecognizer *)recognizer 



{ 


    UIGestureRecognizerState state = [recognizer state]; 

    if (state == UIGestureRecognizerStateBegan || state == UIGestureRecognizerStateChanged) 
{ 
    CGFloat scale = [recognizer scale]; 
    [recognizer.view setTransform:CGAffineTransformScale(recognizer.view.transform, scale, scale)]; 
    [recognizer setScale:1.0]; 
} 

}