2016-11-09 12 views
0

私はかなり新しいiOSです。ピンチジェスチャーを使用して慣性とオーバーヘッドでズームする方法を理解しようとしています(単語のオーバーヘッドが正しいかどうかはわかりませんこの文脈では、ドイツ語では "Überschwingen"と呼ばれる)。iOS:慣性とオーバーヘッドでピンチジェスチャーを使用してズームする

基本的には何をすればいいですか:ズームできるズーム・スケール(私の場合は1.0から4.0)が必要です。ジェスチャーが終了すると、与えられた速度をとり、カーブをアニメーションにして、指定されたスケールをオーバーフローまたはアンダーフローさせてから、テンションをかけて最小または最大に戻します。

私はこれのために動作するジェスチャー認識を得て、それは私の最小と最大スケール(stackoverflowからの例を使用して)を利用して取得することができました。これは私が今までに得たものです:

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

    if([recognizer state] == UIGestureRecognizerStateBegan) { 
     previousScale = 1.0; 
     lastPoint = [recognizer locationInView:[recognizer view]]; 
    } 

    if ([recognizer state] == UIGestureRecognizerStateChanged) { 

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

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

     CGFloat newScale = 1 - (previousScale - [recognizer scale]); // new scale is in the range (0-1) 
     newScale = MIN(newScale, kMaxScale/currentScale); 
     newScale = MAX(newScale, kMinScale/currentScale); 
     scale = newScale; 

     CGAffineTransform transform = CGAffineTransformScale([[recognizer view] transform], newScale, newScale); 

     [recognizer view].transform = transform; 

     CGPoint point = [recognizer locationInView:[recognizer view]]; 
     CGAffineTransform transformTranslate = CGAffineTransformTranslate([[recognizer view] transform], point.x-lastPoint.x, point.y-lastPoint.y); 

     [recognizer view].transform = transformTranslate; 
     NSLog(@"Transformed"); 
    }  
} 

ここで私はどのようにアニメーションを追加できるのか分かります。助けてくれてありがとう!

答えて

0

UIScrollViewは既にアニメーションとともにUIScrollViewが統合されているため、ズーム効果を得るにはUIScrollViewを使用する必要があります。 UIViewをUIScrollViewの中に追加するだけです。

ここではUIScrollViewの素晴らしいチュートリアルです。彼はUIImageViewを使用していますが、UIViewは同様の方法で動作します。

https://www.raywenderlich.com/122139/uiscrollview-tutorial

関連する問題