Ios 如果检测到越界,则禁用平移手势

Ios 如果检测到越界,则禁用平移手势,ios,uiview,gesture,uipangesturerecognizer,Ios,Uiview,Gesture,Uipangesturerecognizer,我有一个UIView,我正在尝试在屏幕上上下移动,但是我只希望使其能够平移,以便在视图处于正常位置(0,0)时,您无法向下拖动视图 我试图检测识别器的中心何时不是视图高度的一半,但是视图是不可移动的,并且中心始终是高度的一半(在本例中为230) 有什么想法吗 - (IBAction)panDetected:(UIPanGestureRecognizer *)recognizer { CGPoint translation = [recognizer translationInView:s

我有一个UIView,我正在尝试在屏幕上上下移动,但是我只希望使其能够平移,以便在视图处于正常位置(0,0)时,您无法向下拖动视图

我试图检测识别器的中心何时不是视图高度的一半,但是视图是不可移动的,并且中心始终是高度的一半(在本例中为230)

有什么想法吗

- (IBAction)panDetected:(UIPanGestureRecognizer *)recognizer {
    CGPoint translation = [recognizer translationInView:self.view];
    NSLog(@"\ncenter.y: %f\ntranslation.y: %f\n", recognizer.view.center.y, translation.y);
    if (recognizer.view.center.y > ([[UIScreen mainScreen] bounds].size.height - 20)/2) {
            return;
    }
    recognizer.view.center = CGPointMake(recognizer.view.center.x,
                                         recognizer.view.center.y + translation.y);
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];
}
试一试

CGPoint translation=[recognizer translationview:self.view];
if(translation.x+recognizer.view.frame.origin.x
CGPoint translation=[recognizer translationview:self.view];
CGPoint finalpoint=CGPointMake(recognizer.view.center.x+translation.x,recognizer.view.center.y+translation.y);
//限制边界

如果((recognizer.view.frame.origin.x>0&&translation.x>0)|(recognizer.view.frame.origin.x+recognizer.view.frame.size.width0&&translation.y>0)|(recognizer.view.frame.origin.y+recognizer.view.frame.size.height而不是手动计算点是否在视图的边界内,请使用
CGRecrectContainsPoint(rect,point)
。这对我来说很有用,我喜欢它,因为它更短,可读性更强:

func handlePan(pan: UIPanGestureRecognizer) {
    switch pan.state {
    case .Began:
        if CGRectContainsPoint(self.pannableView.frame, pan.locationInView(self.pannableView)) {
            // Gesture started inside the pannable view. Do your thing.
        }
}

recognizer.view.center=CGPointMake(recognizer.view.center.x,MAX(recognizer.view.center.y+translation.y,230));
recognizer.view.center = CGPointMake(recognizer.view.center.x, MAX(recognizer.view.center.y + translation.y, ([[UIScreen mainScreen] bounds].size.height - 20)/2));
CGPoint translation = [recognizer translationInView:self.view];
CGPoint finalpoint = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y+ translation.y);

//limit the boundary    
if ((recognizer.view.frame.origin.x>0 && translation.x > 0) || (recognizer.view.frame.origin.x + recognizer.view.frame.size.width<=320 && translation.x < 0))
    finalpoint.x = recognizer.view.center.x;

if ((recognizer.view.frame.origin.y>0 && translation.y > 0) || (recognizer.view.frame.origin.y + recognizer.view.frame.size.height<=self.view.frame.size.height && translation.y < 0))
    finalpoint.y = recognizer.view.center.y;

//set final position
recognizer.view.center = finalpoint;
[recognizer setTranslation:CGPointZero inView:self.view];
func handlePan(pan: UIPanGestureRecognizer) {
    switch pan.state {
    case .Began:
        if CGRectContainsPoint(self.pannableView.frame, pan.locationInView(self.pannableView)) {
            // Gesture started inside the pannable view. Do your thing.
        }
}