gpt4 book ai didi

swift - 将 uipangesture 应用于 uitextfield

转载 作者:行者123 更新时间:2023-12-01 09:45:34 25 4
gpt4 key购买 nike

我下面的 swift 代码将 pangesture 应用于一个文本字段。问题是当我在文本字段中输入内容时。文本字段回到原来的约束位置。我只是不希望它在文本输入到文本字段时恢复。这是一个约束问题。如果我删除我想要的约束。所以要看到这个效果,只需将代码复制到 Xcode 并应用 Storyboard约束,你就会明白我的意思。

import UIKit
class fullScreen : UIViewController {

@IBOutlet var i : UItextField!


var g11 = UIPanGestureRecognizer()

override func viewDidLoad() {

g11 = UIPanGestureRecognizer(target: self, action: #selector(fullScreen.g1Method))

i.isUserInteractionEnabled = true

i.addGestureRecognizer(g11)




}



@objc func g1Method(_ sender: UIPanGestureRecognizer){


let tranistioon = sender.translation(in: self.view)
sender.view!.center = CGPoint(x: sender.view!.center.x + tranistioon.x, y: sender.view!.center.y + tranistioon.y)
sender.setTranslation(CGPoint.zero,in: self.view) }


}

最佳答案

您遇到的问题是 Storyboard 约束保持事件状态,constant 没有任何更改。类对象的字段。以下是解决方法:

我加了两个 IBOutlet对 Storyboard上有问题的约束的引用:

@IBOutlet var leadingConstraint: NSLayoutConstraint!
@IBOutlet var topConstraint: NSLayoutConstraint!

此外,在这些约束的正下方,我添加了对 textField 原点的引用,如下所示: var textFieldOrigin = CGPoint.zero
最后,我更改了手势识别器方法以区分 UIPanGestureRecognizer 的状态。 .这是我所做的:
    @objc func g1Method(_ sender: UIPanGestureRecognizer) {
if sender.state == .began {
textFieldOrigin = sender.location(in: i)
} else if sender.state == .ended {
topConstraint.constant = i.frame.origin.y - i.frame.height
leadingConstraint.constant = i.frame.origin.x
topConstraint.isActive = true
leadingConstraint.isActive = true
} else {
let location = sender.location(in: view)
i.frame.origin = CGPoint(x: location.x - textFieldOrigin.x, y: location.y - textFieldOrigin.y)
topConstraint.isActive = false
leadingConstraint.isActive = false
}
}

此代码中的关键点是关闭约束,更新它们的常量,然后在手势识别器完成后重新打开它们。

关于swift - 将 uipangesture 应用于 uitextfield,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60195658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com