Swift 使用带自动布局约束的UIView.transition(从、到)
我正试着展示一张卡片,并在点击时翻转该卡片 为此,我有一个UIView,它充当两个独立UIView(前视图、后视图)的容器视图。我已将TapGestureRecognitor附加到容器视图,并正在调用下面的函数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
@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。正是我需要的!