2015-09-19 2 views
1

Я стараюсь, чтобы мой UILabel не двигался ниже CONTROLTOPOFFSET.Ограничения движения жестких движений с быстрым движением

CONTROLTOPOFFSET = (UIScreen.mainScreen().bounds.size.height - CONTROLSIZE) - CONTROLPAD 

Я использую UIPanGestureRecognizer и хотел бы, чтобы запустить проверку в рамках этой функции, просто не знает, как.

func moveScore(gesture: UIPanGestureRecognizer) { 

    let tranlation: CGPoint = gesture.translationInView(boardView) 
     gesture.view?.center = CGPointMake(gesture.view!.center.x + tranlation.x, gesture.view!.center.y + tranlation.y) 


    gesture.setTranslation(CGPointMake(0, 0), inView: boardView) 
} 

ответ

0

Трудно ответить на этот вопрос, не зная о своей иерархии взглядов. Если предположить, что ваша точка зрения иерархии просто вид из контроллера зрения с точки зрения платы, как подвид, который имеет метку как подвид,

<UIWindow: 0x7fdf5c8157e0; frame = (0 0; 414 736); autoresize = W+H; gestureRecognizers = <NSArray: 0x7fdf5c816ba0>; layer = <UIWindowLayer: 0x7fdf5c814950>> 
    | <UIView: 0x7fdf5c91ec40; frame = (0 0; 414 736); autoresize = W+H; layer = <CALayer: 0x7fdf5c91eda0>> 
    | | <UIView: 0x7fdf5ad11380; frame = (107 268; 200 200); autoresize = RM+BM; layer = <CALayer: 0x7fdf5ad10aa0>> 
    | | <UILabel: 0x7fdf5c91c280; frame = (209 464.333; 42 21); text = 'Label'; opaque = NO; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7fdf5c922850>; layer = <_UILabelLayer: 0x7fdf5c91c670>> 

Вы могли бы сделать что-то вроде этого:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var label: UILabel! 
    @IBOutlet weak var boardView: UIView! 

    var CONTROLTOPOFFSET : CGFloat { 
    get { 
     let CONTROLSIZE : CGFloat = 200.0 
     let CONTROLPAD : CGFloat = 10.0 
     return (UIScreen.mainScreen().bounds.size.height - CONTROLSIZE) - CONTROLPAD 
    } 
    } 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    let panGestureRecognizer = UIPanGestureRecognizer.init(target: self, action: "moveScore:") 
    label.userInteractionEnabled = true 
    label.addGestureRecognizer(panGestureRecognizer) 
    } 

    func moveScore(gesture: UIPanGestureRecognizer) { 

    let tranlation: CGPoint = gesture.translationInView(view) 
    let newPosition = CGPointMake(gesture.view!.center.x + tranlation.x, gesture.view!.center.y + tranlation.y) 
    if newPosition.y < CONTROLTOPOFFSET { 
     gesture.view?.center = newPosition 
     gesture.setTranslation(CGPointMake(0, 0), inView: view) 
    } 

    } 

} 

разница заключается в том, что перевод выполняется в отношении супервизора, который используется для вашего CONTROLTOPOFFSET, и существует инструкция if, чтобы предотвратить дальнейшее перемещение за пределы.

Я уверен, что ваша иерархия представлений намного сложнее, чем одна из примера, но, надеюсь, вы можете экстраполировать пример на свой код.

Смежные вопросы