0

我试图模仿照片应用程序的行为,其中用户用手指平移照片并且它具有一定的速度。由于我不会进入的原因,我不能将 aUIScrollView与它的缩放一起使用UIImageView,而必须使用 a 来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 回答