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