模拟应用程序的模拟平移行为(速度)

时间:2013-01-11 12:33:46

标签: iphone ios cocoa-touch uigesturerecognizer uipangesturerecognizer

我正在尝试模仿照片应用的行为,其中用户用手指拍摄照片并且它具有一定的速度。由于我不会进入的原因,我无法使用UIScrollView缩放UIImageView,而是必须使用UIImageView实现UIPanGestureRecognizer。 Apple有没有关于如何做到这一点的样本,或者有人知道如何模仿这种行为吗?有关WWDC的任何视频吗? (找不到任何)。

2 个答案:

答案 0 :(得分:3)

如果您愿意整合任何其他第三方现成的控件,那么我建议您查看KTPhotoBrowser演示。

很棒。一切都是以编程方式完成的,但您可以根据自己的要求进行更改。

答案 1 :(得分: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];    
}