0

ユーザーが指で写真をパンし、ある程度の速度を持つ写真アプリの動作を模倣しようとしています。理由については説明しませんが、 をUIScrollViewズームUIImageViewで使用することはできず、代わりに を で実装する必要UIImageViewがありUIPanGestureRecognizerます。Apple にはこれを行う方法のサンプルがありますか、または動作を模倣する方法を知っている人はいますか? これに関する WWDC ビデオはありますか? (何も見つかりませんでした)。

4

2 に答える 2

3

他のサードパーティの既製のコントロールを統合することにオープンである場合は、KTPhotoBrowserデモをご覧になることをお勧めします。

それは素晴らしいです。すべてがプログラムで行われますが、要件に応じて変更できます。

于 2013-01-11T12:46:15.183 に答える
2

UIPinchGestureRecognizer次の関数をセレクターとして実装してフックします。

-(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];    
}
于 2013-01-11T12:45:18.480 に答える