ios – 如何通过Pan手势限制可移动视图

我有一个可通过平移手势移动的UI ImageView.
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[self.photoMask addGestureRecognizer:pan];

我想限制可以在屏幕上移动的区域.而不是用户能够将视图直接拖动到屏幕的一侧,我想限制它的某种边距.我怎样才能做到这一点?

另外,旋转后如何处理?

编辑—

#pragma mark - Gesture Recognizer
-(void)handlePan:(UIPanGestureRecognizer *)gesture {
    NSLog(@"Pan Gesture");
    gesture.view.center = [gesture locationInView:self.view];
}

这是我目前处理平底锅的方法.我需要做的是继续按中心点移动图像视图,并在靠近屏幕边缘时将其移动限制为50.

解决方法

一种可能的解决方案是在handlePan方法中,检查屏幕上点的位置,并且只有在您希望将其限制为的范围内时才提交更改.

对于前者

-(void) handlePan:(UIGestureRecognizer*)panGes{

    CGPoint point = [panGes locationInView:self.view];

    //Only allow movement up to within 100 pixels of the right bound of the screen
    if (point.x < [UIScreen mainScreen].bounds.size.width - 100) {

        CGRect newframe = CGRectMake(point.x,point.y,theImageView.frame.size.width,theImageView.frame.size.height);

        theImageView.frame = newframe;

    }

}

我相信这也可以正确处理任何屏幕旋转

编辑

要通过框架的中心移动图像视图,handlePan方法可能看起来像这样.

-(void)handlePan:(UIPanGestureRecognizer *)gesture {

    CGPoint point = [gesture locationInView:self.view];

    //Only allow movement up to within 50 pixels of the bounds of the screen
    //Ex. (IPhone 5)
    CGRect boundsRect = CGRectMake(50,50,220,448);

    if (CGRectContainsPoint(boundsRect,point)) {
        imgView.center = point;
    }       
}

检查点是否在您想要的范围内,如果是,请将图像视图框的中心设置为该点.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...