Swift 在UIP检测识别器后显示标签

Swift 在UIP检测识别器后显示标签,swift,uipangesturerecognizer,Swift,Uipangesturerecognizer,我试图在用户向下拖动图像后显示标签。问题是标签在之后不会显示。其他一切都很好,但只有标签不起作用。我花了几个小时试图找到一个解决方案,但我不知道我做错了什么 在UIPangestureRecognitor上调用的函数: func pullDownView(gesture: UIPanGestureRecognizer) { if(gesture.state == .changed) { if(iconImage.center.y - (iconImage.frame.si

我试图在用户向下拖动图像后显示标签。问题是标签在之后不会显示。其他一切都很好,但只有标签不起作用。我花了几个小时试图找到一个解决方案,但我不知道我做错了什么

在UIPangestureRecognitor上调用的函数:

func pullDownView(gesture: UIPanGestureRecognizer) {
    if(gesture.state == .changed) {
        if(iconImage.center.y - (iconImage.frame.size.height / 2) < view.frame.size.height / 3) {
            let translationY = gesture.translation(in: view).y
            iconImage.center.y += translationY

            gesture.setTranslation(CGPoint(x: 0, y: 0), in: view)
            iconImage.updateConstraints()
        }else{
            iconImage.isUserInteractionEnabled = false
            iconImage.center.y = (view.frame.size.height / 3) + (iconImage.frame.size.height / 2)
            iconImage.updateConstraints()
        }
    }

    if(gesture.state == .cancelled || gesture.state == .ended || gesture.state == .failed) {
        if(iconImage.center.y - (iconImage.frame.size.height / 2) >= view.frame.size.height / 6) {
            if(iconImage.center.y != (view.frame.size.height / 3) + (iconImage.frame.size.height / 2)) {
                iconImage.isUserInteractionEnabled = false
                iconImage.center.y = (view.frame.size.height / 3) + (iconImage.frame.size.height / 2)
                iconImage.updateConstraints()

                getAccounts()
            }
        }else{
            iconImage.center.y = view.frame.size.height / 2
            iconImage.updateConstraints()
        }
    }
}

func getAccounts() {
    noAccountsLabel = UILabel(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 50))
    noAccountsLabel.text = "No accounts found!"
    noAccountsLabel.font = UIFont(name: "Verdana", size: 20)
    noAccountsLabel.textAlignment = .center
    noAccountsLabel.center = CGPoint(x: view.frame.size.width / 2, y: noAccountsLabel.frame.size.height * 2)

    view.addSubview(noAccountsLabel)
}
func下拉视图(手势:UIPangestureRecognitor){
如果(手势状态==.changed){
if(iconImage.center.y-(iconImage.frame.size.height/2)=view.frame.size.height/6){
如果(iconImage.center.y!=(view.frame.size.height/3)+(iconImage.frame.size.height/2)){
iconImage.isUserInteractionEnabled=false
iconImage.center.y=(view.frame.size.height/3)+(iconImage.frame.size.height/2)
iconImage.updateConstraints()
getAccounts()
}
}否则{
iconImage.center.y=view.frame.size.height/2
iconImage.updateConstraints()
}
}
}
func getAccounts(){
noAccountsLabel=UILabel(帧:CGRect(x:0,y:0,宽度:view.frame.size.width,高度:50))
noAccountsLabel.text=“未找到任何帐户!”
noAccountsLabel.font=UIFont(名称:“Verdana”,大小:20)
noAccountsLabel.textAlignment=.center
noAccountsLabel.center=CGPoint(x:view.frame.size.width/2,y:noAccountsLabel.frame.size.height*2)
view.addSubview(无帐户标签)
}
谢谢你的帮助! 斯特夫

为我工作

PS:我可能在这里做了错误的逻辑,但是你可以使用
guard
来清除一些
if
语句:

guard gesture.state == .cancelled || gesture.state == .ended || gesture.state == .failed else  { return }

guard (iconImage.center.y - (iconImage.frame.size.height / 2) >= view.frame.size.height / 6) else { return }

if(iconImage.center.y != (view.frame.size.height / 3) + (iconImage.frame.size.height / 2)) {
  iconImage.isUserInteractionEnabled = false
  iconImage.center.y = (view.frame.size.height / 3) + (iconImage.frame.size.height / 2)
  iconImage.updateConstraints()

  getAccounts()
}

好的,我只是想确保。。文本颜色与背景颜色不一样,是吗?并且您确定正在调用块,该块具有
getAccounts
?是的,我尝试打印一个字符串,它工作正常。文本颜色不一样,试图更改,但仍然无效。
noAccountsLabel
在哪里创建?那是IBOutlet吗?只是检查一下明显的。。。(1) 你在使用自动布局吗?我只看到标签的帧坐标。(2) 说到这里,请尝试设置您声明的UILabel()的框架,而不是初始化另一个UILabel。我觉得这种语法不对。我已经找到了一种显示标签的解决方案,但现在图标图像跳回到了以前的位置,你知道我如何解决这个问题吗?非常愚蠢,但我忘记了我已经在用户默认设置中设置了“帐户”,这就是标签没有显示的原因。但是当标签显示时,图标图像会跳回原来的位置。尝试将
getAccounts
放在图标图像代码上方的块中仍然不起作用,我认为这是图标图像的限制因素,可能吗?我没有太多的限制因素,但这似乎是问题所在,如果在屏幕上添加新内容时它会跳转。您可能需要在此处发布新问题:)
guard gesture.state == .cancelled || gesture.state == .ended || gesture.state == .failed else  { return }

guard (iconImage.center.y - (iconImage.frame.size.height / 2) >= view.frame.size.height / 6) else { return }

if(iconImage.center.y != (view.frame.size.height / 3) + (iconImage.frame.size.height / 2)) {
  iconImage.isUserInteractionEnabled = false
  iconImage.center.y = (view.frame.size.height / 3) + (iconImage.frame.size.height / 2)
  iconImage.updateConstraints()

  getAccounts()
}