很长一段时间后,我带着一个问题来到SO,我还没有学到足够的东西:(。
我有一个UIScrollView
里面有UIImageView
它。的图像UIImageView
是通过左右滑动来改变的。我知道覆盖触摸UIScrollView
不是一个好的和有效的解决方案,所以我在UIScrollView
覆盖边界的(而不是它的子视图)上添加了一个透明视图,UIScrollView
并覆盖了它的触摸方法以更改滑动时的图像。
现在,在透明视图中添加捏合的帮助下,gesture recognizer
我能够以UIScrollView
编程方式缩放图像。到这里为止,我能够顺利地工作,但我还有另一个典型的功能。我必须用手指上下移动缩放的图像,这样我才能看到裁剪后的图像。我是在UILongPressGestureRecognizer
添加到我的透明视图的帮助下完成的。在触摸持续时间为 1 秒后,我添加了一个UIImageView
带有四向箭头图像的图像并添加了触摸位置。现在当我移动我的手指时,fourwayarrow image
跟随我的手指,但滚动视图中的图像不跟随我的手指。它有点生涩,经常像我系了一根松紧带一样工作。所以最初我必须将字符串拉到某个阈值(直到那个点滚动视图不会移动),当它达到那个水平时,它突然开始失控。我在这里添加代码供大家查看。
如果您需要任何其他信息,请随时添加评论。
- (void) handleLongPress:(UILongPressGestureRecognizer *)longPressGestureRecognizer{
CGPoint touchLocation = [longPressGestureRecognizer locationInView:self.transparentLayer];
switch (longPressGestureRecognizer.state) {
case UIGestureRecognizerStatePossible: break;
case UIGestureRecognizerStateBegan:{
if (fourWayArrowImageView == nil) {
fourWayArrowImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"4wayarrow.png"]];
[fourWayArrowImageView setBackgroundColor:[UIColor clearColor]];
}
_previousLocation.x = touchLocation.x;
_previousLocation.y = touchLocation.y;
[fourWayArrowImageView setCenter:touchLocation];
[self.transparentLayer addSubview:fourWayArrowImageView];
}
break;
case UIGestureRecognizerStateChanged:{
float dx = (touchLocation.x - _previousLocation.x);
float dy = (touchLocation.y - _previousLocation.y);
CGPoint currentMaxOffset = [self currentMaxOffset];
CGPoint currentOffset = [self.rotatableImageViewContainingScrollView contentOffset];
float theScale = [self.rotatableImageViewContainingScrollView zoomScale];
currentOffset.x -= (dx*theScale);
currentOffset.y -= (dy*theScale);
[fourWayArrowImageView setCenter:touchLocation];
CGSize size = self.rotatableImageViewContainingScrollView.frame.size;
[self.rotatableImageViewContainingScrollView scrollRectToVisible:CGRectMake(currentOffset.x, currentOffset.y, size.width, size.height) animated:YES];
_prevMaxOffset = CGPointMake(currentMaxOffset.x, currentMaxOffset.y);
}
break;
case UIGestureRecognizerStateCancelled:
case UIGestureRecognizerStateFailed:
case UIGestureRecognizerStateEnded: [fourWayArrowImageView removeFromSuperview]; break;
}
}