模仿照片应用程序的平移行为(速度)

Posted

技术标签:

【中文标题】模仿照片应用程序的平移行为(速度)【英文标题】:Mimic Panning Behavior (velocity) of Photos App 【发布时间】:2013-01-11 12:33:46 【问题描述】:

我正在尝试模仿照片应用程序的行为,其中用户用手指平移照片并且它具有一定的速度。由于我不会进入的原因,我不能使用带有缩放功能的UIScrollView UIImageView,而是必须实现带有UIPanGestureRecognizerUIImageView。苹果是否有任何关于如何做到这一点的样本,或者有人知道如何模仿这种行为吗?有关于这方面的 WWDC 视频吗? (找不到)。

【问题讨论】:

【参考方案1】:

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

太棒了。一切都以编程方式完成,但您可以根据需要进行更改。

【讨论】:

【参考方案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];    

【讨论】:

谢谢,相信这是为了扩展。您是否偶然知道如何进行平移?

以上是关于模仿照片应用程序的平移行为(速度)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用资产库加快图像加载速度?

UITableView 的水平移动?

如何根据平移手势速度向 Sprite Kit 节点应用角脉冲

模仿人脑视觉处理,助力神经网络应对对抗性样本

使用来自另一个图像的事件缩放和平移图像

jQuery 插件 Magnify 开发简介(仿 Windows 照片查看器)