使用UIPanGestureRecognizer
问题描述:
我有一个小的imageView,使用UIPanGestureRecognizer
在屏幕上移动,但是当它从超级视图的边缘出来时没有得到更多的触摸,因此不能再回头。我怎样才能防止图像从超级视图的边缘出来? 这是代码:使用UIPanGestureRecognizer
- (void)pan:(UIPanGestureRecognizer *)gestureRecognizer
{
if (inLongPress) {
UIView *hitView = [gestureRecognizer view];
[self adjustAnchorPointForGestureRecognizer:gestureRecognizer];
if (!(CGRectContainsRect(self.imageView.frame, hitView.frame))) {
[UIView beginAnimations:@"" context:NULL];
[hitView setCenter:CGPointMake(_prevCenter.x, _prevCenter.y)];
[UIView commitAnimations];
}
_prevCenter=hitView.center;
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
CGPoint translation = [gestureRecognizer translationInView:[hitView superview]];
[hitView setCenter:CGPointMake([hitView center].x + translation.x, [hitView center].y + translation.y)];
[gestureRecognizer setTranslation:CGPointZero inView:[hitView superview]];
}
if ([gestureRecognizer state] == UIGestureRecognizerStateEnded){
inLongPress=NO;
hitView.alpha=1.0;
}
}
}
答
只是用了几个if
,限制了CGPoint到所允许的范围。
像这样可以确保您不能移动对象的视图之外:
CGFloat proposedX = location.x;
CGFloat proposedY = location.y;
CGRect objectFrame = hitView.frame;
CGFloat allowedXMin = 0 + objectFrame.size.width/2.0f;
CGFloat allowedXMax = self.view.bounds.size.width - objectFrame.size.width/2.0f;
CGFloat allowedYMin = 0 + objectFrame.size.height/2.0f;
CGFloat allowedYMax = self.view.bounds.size.height - objectFrame.size.height/2.0f;
if (proposedX < allowedXMin) {
proposedX = allowedXMin;
}
else if (proposedX > allowedXMax) {
proposedX = allowedXMax;
}
if (proposedY < allowedYMin) {
proposedY = allowedYMin;
}
else if (proposedY > allowedYMax) {
proposedY = allowedYMax;
}
location = CGPointMake(proposedX, proposedY);
hitView.center = location;
答
在视图控制器的你的viewDidLoad方法,只需设置clipsToBounds您的上海华的属性YES。
[superview setClipsToBounds:YES];
非常感谢你,它的工作原理! –