2012-03-31 4 views
2

画像ビューを含むビューが1つあるアプリケーションを1つ作成しました。 以下は、UIPinchGestureRecognizerを使用して画像をズームするコードです。 ここでinnerviewは私のビューの名前です。UIPinchGestureRecognizer xcodeで画像を拡大/パンする

- (void)viewDidLoad 
    { 
[super viewDidLoad]; 

//Zoom Photo 
UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)]; 
[innerview addGestureRecognizer:pinchGesture]; 
[pinchGesture release]; 
mCurrentScale = 0; 
mLastScale = 0; 
} 

-(void)handlePinch:(UIPinchGestureRecognizer*)sender { 

NSLog(@"latscale = %f",mLastScale); 

mCurrentScale += [sender scale] - mLastScale; 
mLastScale = [sender scale]; 

if (sender.state == UIGestureRecognizerStateEnded) 
{ 
    mLastScale = 1.0; 
} 

CGAffineTransform currentTransform = CGAffineTransformIdentity; 
CGAffineTransform newTransform = CGAffineTransformScale(currentTransform,mCurrentScale, mCurrentScale); 
innerview.transform = newTransform; 

} 

しかし、ここでScrollViewを使用して画像を正しく表示する方法はありますか?

答えて

2

は、そのコンテンツのサイズこのヘルプはあなた:)

+0

ありがとうございました。それは問題を解決していません。 –

+0

今問題を明確にすることはできますか?私たちがあなたを助けることができるように? – DivineDesert

+0

ズームとパンの両方が必要です。 –

1

はこれを試して

-(void)scale:(id)sender { 
    if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) { 
    lastScale = 1.0; 
    CGSize zoomViewSize = CGSizeApplyAffineTransform(imgScrollView.frame.size, [(UIPinchGestureRecognizer *)sender view].transform); 
    CGPoint centerPoint = CGPointApplyAffineTransform(imgScrollView.frame.origin, [(UIPinchGestureRecognizer *)sender view].transform); 

    CGRect r = imgScrollView.bounds; 
    CGSize scrollViewSize = imgScrollView.frame.size; 
    imgScrollView.contentSize = zoomViewSize; 
    imgScrollView.contentOffset = centerPoint; 
    } 

    CGFloat currentScale = [[[(UIPinchGestureRecognizer*)sender view].layer valueForKeyPath:@"transform.scale"] floatValue]; 

    CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]); 
    scale = MIN(scale, imgScrollView.maximumZoomScale/currentScale); 
    scale = MAX(scale, imgScrollView.minimumZoomScale/currentScale); 
    CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform; 
    CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale); 
    [[(UIPinchGestureRecognizer*)sender view] setTransform:newTransform]; 
    lastScale = [(UIPinchGestureRecognizer*)sender scale];  
} 

希望をあなたがピンチに完了したら、あなたは新しいイメージのサイズを取得することができますスクロールビュー であなたのinnerViewを埋め込み、その後設定しました

-(void)scale:(id)sender { 


    if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) { 
     _lastScale = 1.0; 
    } 

    CGFloat scale = 1.0 - (_lastScale - [(UIPinchGestureRecognizer*)sender scale]); 
    CGAffineTransform currentTransform = self.transform; 
    CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale); 

    [self setTransform:newTransform]; 


}