我的视图控制器中有一个标签。我每次点击标签时都试图将标签的位置向左移动50个点。这是我到目前为止所做的,但我的标签不会在模拟中移动。我对标签有限制。它大约100宽,高50,并且它也在视图控制器中居中。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let tapGesture = UITapGestureRecognizer(target: gestureLabel, action: #selector(moveLabel))
gestureLabel.addGestureRecognizer(tapGesture)
}
func moveLabel(){
if(left){
moveLeft()
}
else{
moveRight()
}
}
func moveLeft(){
let originalX = gestureLabel.frame.origin.x
if(originalX < 0){
bringIntoFrame()
}
else{
gestureLabel.frame.offsetBy(dx: -50, dy: 0)
}
}
答案 0 :(得分:0)
UILabel userInteractionEnabled
默认为false
。尝试将其设置为true
答案 1 :(得分:0)
您应该更改标签的约束,而不是标签本身。
此外,您的target
应该是self
,而不是gestureLabel
。
另外,你可以动画那个。 :)
像这样:
class ViewController: UIViewController {
// Centers the Meme horizontally.
@IBOutlet weak var centerHorizontalConstraint: NSLayoutConstraint!
// A custom UIView.
@IBOutlet weak var okayMeme: OkayMeme!
override func viewDidLoad() {
super.viewDidLoad()
addGestureRecognizer()
}
func addGestureRecognizer() {
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(moveMeme))
okayMeme.addGestureRecognizer(tapGesture)
}
func moveMeme() {
UIView.animate(withDuration: 2.0) {
self.centerHorizontalConstraint.constant -= 50
self.view.layoutIfNeeded()
}
}
}
&#34;演示&#34;:
答案 2 :(得分:0)
此处您可以将标签移动到您想要的地方
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
let position = touch.location(in: self.view)
print(position.x)
print(position.y)
lbl.frame.origin = CGPoint(x:position.x-60,y:position.y-50)
}
}
答案 3 :(得分:0)
标签不会移动,因为它有约束。最简单的方法是:
1)以编程方式创建标签(这样你就可以自由地移动它)
var labelDinamic = UILabel(frame: CGRectMake(0, 0,200, 200));
labelDinamic.text = "test text";
self.view.addSubview(labelDinamic);
2)设置标签初始位置(我建议使用当前标签中有约束的位置。另外,隐藏约束标签,因为你不需要它显示)
labelDinamic.frame.origin.x = yourLabelWithConstraints.frame.origin.x;
labelDinamic.frame.origin.y = yourLabelWithConstraints.frame.origin.y;
3)现在,您可以使用属性
移动标签labelDinamic.frame.origin.x = 123
labelDinamic.frame.origin.y = 200
答案 4 :(得分:0)
您创建了一个新框架,但没有将其分配给标签。 offsetBy
不会更改框架。它会创建一个新的。
替换
gestureLabel.frame.offsetBy(dx: -50, dy: 0)
与
gestureLabel.frame = gestureLabel.frame.offsetBy(dx: -50, dy: 0)
但是上面的方法假设你直接使用,而不是约束。标准方法是使用“超前视图”约束并更改其常量而不是更改框架。