【问题标题】:UIViewAnimationTransition flip UIImageViewUIViewAnimationTransition 翻转 UIImageView
【发布时间】:2017-12-25 08:45:12
【问题描述】:

Video

我在底部的点击函数中的 UIView.transitions 第一次工作,但第二次我的 else 语句每次都翻转回前端崩溃。收到错误消息“致命错误:在展开可选值时意外发现 nil”。每次都想成功地从前到后和从后到前翻转:) 提前谢谢你们。 ;) 另外,我在情节提要中添加了 ImageOne 和 ImageTwo 视图!

import UIKit
import Foundation
import Firebase
import FirebaseDatabase

class ViewController: UIViewController {

@IBOutlet weak var mainScrollView: UIScrollView!
@IBOutlet weak var imageOne: UIImageView!
@IBOutlet weak var imageTwo: UIImageView!

var myImageArray = [UIImage]()
var myImageArray2 = [UIImage]()

var back: UIImageView!
var front: UIImageView!

var showingFront = true

override func viewDidLoad() {
    super.viewDidLoad()
    SignedIn()

    self.view.addGestureRecognizer(revealViewController().panGestureRecognizer())

    let singleTap = UITapGestureRecognizer(target: self, action: #selector(ViewController.tapped))
    singleTap.numberOfTapsRequired = 1
    mainScrollView.addGestureRecognizer(singleTap)
    mainScrollView.isUserInteractionEnabled = true

    mainScrollView.frame = view.frame

    myImageArray = [image1, image2 ,image3, image4, image5]
    myImageArray2 = [imageText1, imageText2 ,imageText3, imageText4, imageText5]

    for i in 0..<myImageArray.count {

        front = UIImageView()
        front.image = myImageArray[i]
        front.contentMode = .scaleToFill
        let yPosition = self.view.frame.height * CGFloat(i) + self.view.frame.height/2 - (self.view.frame.height / 1.1)/2
        let xPosition = self.view.frame.width/2 - (self.view.frame.width / 1.1)/2
        front.frame = CGRect(x: xPosition, y: yPosition, width: self.view.frame.width / 1.1, height: self.view.frame.height / 1.1)
        front.layer.borderWidth = 5

        back = UIImageView()
        back.image = myImageArray2[i]
        back.contentMode = .scaleToFill
        back.frame = CGRect(x: xPosition, y: yPosition, width: self.view.frame.width / 1.1, height: self.view.frame.height / 1.1)
        back.layer.borderWidth = 5

        mainScrollView.contentSize.height = mainScrollView.frame.height * CGFloat(i + 1)

        imageOne.addSubview(front)
        imageTwo.addSubview(back)
    }
}

func tapped() {
    print("Hello")
    if (showingFront) {
        UIView.transition(from: imageOne, to: imageTwo, duration: 1, options: UIViewAnimationOptions.transitionFlipFromRight, completion: nil)
        showingFront = false
    } else {
        UIView.transition(from: imageTwo, to: imageOne, duration: 1, options: UIViewAnimationOptions.transitionFlipFromLeft, completion: nil)
        showingFront = true
    }
}

}

【问题讨论】:

    标签: ios swift uiview flip uiviewanimationtransition


    【解决方案1】:

    您需要添加第二个动画选项以保持“来自”视图的播放。这是我的做法:

    // declare the animation options
    let transitionOptions: UIViewAnimationOptions = [.transitionFlipFromRight, .showHideTransitionViews]
    
    func tapped() {
        print("Hello")
        if (showingFront) {
            UIView.transition(from: imageOne, to: imageTwo, duration: 1, options: transitionOptions, completion: nil)
            showingFront = false
        } else {
            UIView.transition(from: imageTwo, to: imageOne, duration: 1, options: transitionOptions, completion: nil)
            showingFront = true
        }
    }
    

    我记得我花了整整一个小时来添加第二个选项,因为 Swift 2 代码你可以做不同的事情。

    【讨论】:

    • 太棒了,非常感谢你 :) 已经坚持了一段时间。你是救生员!!!
    猜你喜欢
    • 1970-01-01
    • 2011-09-26
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多