Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用带自动布局约束的UIView.transition(从、到)_Swift_Autolayout - Fatal编程技术网

Swift 使用带自动布局约束的UIView.transition(从、到)

Swift 使用带自动布局约束的UIView.transition(从、到),swift,autolayout,Swift,Autolayout,我正试着展示一张卡片,并在点击时翻转该卡片 为此,我有一个UIView,它充当两个独立UIView(前视图、后视图)的容器视图。我已将TapGestureRecognitor附加到容器视图,并正在调用下面的函数 @objc func flipCard() { print("Flipping card") if showingBack == true { UIView.transition(from: backView, to: frontView, durati

我正试着展示一张卡片,并在点击时翻转该卡片

为此,我有一个UIView,它充当两个独立UIView(前视图、后视图)的容器视图。我已将TapGestureRecognitor附加到容器视图,并正在调用下面的函数

@objc func flipCard() {
    print("Flipping card")

    if showingBack == true {
        UIView.transition(from: backView, to: frontView, duration: 0.3, options: .transitionFlipFromLeft, completion: nil)
        showingBack = false
    } else {
        UIView.transition(from: frontView, to: backView, duration: 0.3, options: .transitionFlipFromRight, completion: nil)
        showingBack = true
    }
}
第一次倒转有效,倒转不起作用——卡就消失了。我发现,当我将这两个子视图的AutoresizingMaskIntoConstraints设置为true时,翻转效果很好,如下所示:

@objc func flipCard() {
    print("Flipping card")
    frontView.translatesAutoresizingMaskIntoConstraints = true
    backView.translatesAutoresizingMaskIntoConstraints = true

    if showingBack == true {
        UIView.transition(from: backView, to: frontView, duration: 0.3, options: .transitionFlipFromLeft, completion: nil)
        showingBack = false
    } else {
        UIView.transition(from: frontView, to: backView, duration: 0.3, options: .transitionFlipFromRight, completion: nil)
        showingBack = true
    }
}
但是,将AutoresizingMaskIntoConstraints设置为true会在我的视图中导致一些UI冲突,这就是我希望避免这种情况的原因。我很感激你告诉我如何解决这个问题。有人能解释一下为什么会发生这种事吗


非常感谢

如果
翻译自动调整大小GMaskintoConstraints
给您带来问题,请尝试以下方法:

@objc func flipCard() {
    print("Flipping card")
    frontView.translatesAutoresizingMaskIntoConstraints = true
    backView.translatesAutoresizingMaskIntoConstraints = true

    if showingBack == true {
        UIView.transition(from: backView, to: frontView, duration: 0.3, options: .transitionFlipFromLeft) { (success) in
            frontView.translatesAutoresizingMaskIntoConstraints = false
            backView.translatesAutoresizingMaskIntoConstraints = false
            showingBack = false
        }
    } else {
        UIView.transition(from: frontView, to: backView, duration: 0.3, options: .transitionFlipFromRight) { (success) in
            frontView.translatesAutoresizingMaskIntoConstraints = false
            backView.translatesAutoresizingMaskIntoConstraints = false
            showingBack = true
        }
    }
}

如果
translatesAutoresizingMaskIntoConstraints=true
表示 系统将创建一组约束,这些约束将复制视图的自动调整大小掩码指定的行为。如果为false,则表示正在使用纯约束(
NSLayoutConstraint

此外,请注意:

默认情况下,对于您选择的任何视图,该属性都设置为true 以编程方式创建。如果在Interface Builder中添加视图,则 系统自动将此属性设置为false


我有一个不断翻转的
UIView
容器,它使用
false
。我要做的是以不同的方式处理
选项
参数,将
.showHideTransitionViews
添加到翻转方向。没有这个,我只是翻了一下然后。。。没什么

这有点奇怪,因为你不能“仅仅”添加它(至少在Swift 3 iOS 10天内),但以下是你可以尝试的:

let flipFromLeftOptions: UIViewAnimationOptions = [.transitionFlipFromLeft, .showHideTransitionViews]
let flipFromRightOptions: UIViewAnimationOptions = [.transitionFlipFromRight, .showHideTransitionViews]
在过渡代码中:

if showingBack == true {
    UIView.transition(from: backView, to: frontView, duration: 0.3, options: flipFromLeftOptions, completion: nil)
    showingBack = false
} else {
    UIView.transition(from: frontView, to: backView, duration: 0.3, options: flipFromRightOptions, completion: nil)
    showingBack = true
}

很高兴你发现它有用:)谢谢@dfd。正是我需要的!