Трудно ответить на этот вопрос, не зная о своей иерархии взглядов. Если предположить, что ваша точка зрения иерархии просто вид из контроллера зрения с точки зрения платы, как подвид, который имеет метку как подвид,
<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, чтобы предотвратить дальнейшее перемещение за пределы.
Я уверен, что ваша иерархия представлений намного сложнее, чем одна из примера, но, надеюсь, вы можете экстраполировать пример на свой код.