Sco*_*t B 11 animation uiimageview ios swift
我有两个UIImageViews.一个是'Front',另一个是'Back'.我正在尝试实现它,这样当你点击'Back'时它会触发动画并翻转卡片.
动画效果很好.但它动画整页,我不想要.我只想要UIImageView
翻转.我看不出我做错了什么.可能是显而易见的事情.
@IBOutlet weak var answerImageViewer: UIImageView?
@IBOutlet weak var backAnswerImageViewer: UIImageView?
override func viewDidLoad() {
super.viewDidLoad()
startNewGame()
retrieveNewQuestion()
setupBannerMessage()
customPlayButtons()
let tapGesture = UITapGestureRecognizer(target: self, action: Selector("tap"))
tapGesture.numberOfTapsRequired = 1
backAnswerImageViewer?.addGestureRecognizer(tapGesture)
backAnswerImageViewer?.userInteractionEnabled = true
}
var showingBack = true
func tap (){
if showingBack{
UIView.transitionFromView(self.backAnswerImageViewer!, toView: self.answerImageViewer!, duration: 1, options: UIViewAnimationOptions.TransitionFlipFromRight, completion: nil)
backAnswerImageViewer?.hidden = true
answerImageViewer?.hidden = false
showingBack = false
}
else {
showingBack = true
UIView.transitionFromView(self.answerImageViewer!, toView: self.backAnswerImageViewer!, duration: 1, options: UIViewAnimationOptions.TransitionFlipFromRight, completion: nil)
backAnswerImageViewer?.hidden = false
answerImageViewer?.hidden = true
}
}
Run Code Online (Sandbox Code Playgroud)
Car*_*Zyl 15
您的问题是您的UIImageViews直接位于"整页"视图中.
transitionFromView 从其superview中删除fromView,并在给定动画的superview上添加toView.因此,它激活了超级视图.
您应该包含一个UIView,它将服务器作为容器并将两个imageView作为子视图.在容器视图上添加您的点按手势.此外,您不应该对imageViews有弱引用,因为一旦完成动画一次,您对后面imageView的引用就会消失.将它们添加到代码而不是故事板中可能更好.无需隐藏imageViews.
以下是一些示例代码:
class MyViewController: UIViewController {
@IBOutlet weak var containerView: UIView!
private let backImageView: UIImageView! = UIImageView(image: UIImage(named: "back"))
private let frontImageView: UIImageView! = UIImageView(image: UIImage(named: "front"))
private var showingBack = false
override func viewDidLoad() {
super.viewDidLoad()
frontImageView.contentMode = .ScaleAspectFit
backImageView.contentMode = .ScaleAspectFit
containerView.addSubview(frontImageView)
frontImageView.translatesAutoresizingMaskIntoConstraints = false
frontImageView.spanSuperview()
let singleTap = UITapGestureRecognizer(target: self, action: #selector(flip))
singleTap.numberOfTapsRequired = 1
containerView.addGestureRecognizer(singleTap)
}
func flip() {
let toView = showingBack ? frontImageView : backImageView
let fromView = showingBack ? backImageView : frontImageView
UIView.transitionFromView(fromView, toView: toView, duration: 1, options: .TransitionFlipFromRight, completion: nil)
toView.translatesAutoresizingMaskIntoConstraints = false
toView.spanSuperview()
showingBack = !showingBack
}
}
Run Code Online (Sandbox Code Playgroud)
J. *_*Doe 15
如果你有一个button
"卡"作为变量,并且你想将他的图像更改为一个名为"1"的新图像.你所要做的就是:
let image = UIImage(named: "1")
card.setImage(image, for: .normal)
UIView.transition(with: card, duration: 2, options: .transitionFlipFromRight, animations: nil, completion: nil)
Run Code Online (Sandbox Code Playgroud)
此解决方案用于翻转“卡”,使用两个UIImageView
(就像您正在使用...),我在UICollectionView中使用它,这当然不是必需的。
class CardCVCell: UICollectionViewCell {
@IBOutlet weak var cardFrontImageView: UIImageView!
@IBOutlet weak var cardBackImageView: UIImageView!
private var flipped: Bool = false {
didSet {
cardFrontImageView.visible = flipped
cardBackImageView.hidden = flipped
}
}
override func awakeFromNib() {
super.awakeFromNib()
cardBackImageView.backgroundColor = UIColor.brownColor()
}
override func prepareForReuse() {
super.prepareForReuse()
cardFrontImageView.image = nil
flipped = false
}
func flipCard(cardModel: Card) {
let flipped = cardModel.flipped
let fromView = flipped ? cardFrontImageView : cardBackImageView
let toView = flipped ? cardBackImageView : cardFrontImageView
let flipDirection: UIViewAnimationOptions = flipped ? .TransitionFlipFromRight : .TransitionFlipFromLeft
let options: UIViewAnimationOptions = [flipDirection, .ShowHideTransitionViews]
UIView.transitionFromView(fromView, toView: toView, duration: 0.6, options: options) {
finished in
cardModel.flipped = !flipped
}
}
}
Run Code Online (Sandbox Code Playgroud)
该代码取自我的开源项目,该项目向人们介绍了Swift开发,称为SwiftIntro,这是一款内存游戏,可从Instagram获取图像。
请注意,卡片型号必须是类而不是值类型
归档时间: |
|
查看次数: |
15249 次 |
最近记录: |