zoukankan      html  css  js  c++  java
  • 点击按钮每次都能实现图片的旋转和切换(swift)

    效果如图:

    代码如下:

    //
    //  ViewController.swift
    //  TwoSidedView
    //
    //  Created by mayl on 2017/12/14.
    //  Copyright © 2017年. All rights reserved.
    //
    
    import UIKit
    
    let gBtn = UIButton.init(type: UIButtonType.custom)
    let gImgV4BottomSide = UIImageView.init(image: UIImage.init(named: "bottomSide"))
    let gImgV4TopSide = UIImageView.init(image: UIImage.init(named: "topSide"))
    
    var lBool4ChangeImgV : Bool = false
    class ViewController: UIViewController {
        
        override func viewDidLoad() {
            super.viewDidLoad()
            setUpUI()
        }
        
        func setUpUI()  {
          
            view.addSubview(gBtn)
            gBtn.addTarget(self, action: #selector(ViewController.btnDidClick), for: UIControlEvents.touchUpInside)
            gBtn.center = view.center
            
            gBtn.addSubview(gImgV4BottomSide)
            gBtn.layer.transform = CATransform3DMakeRotation(CGFloat(Double.pi), 0, 1, 0)
            
          
            gBtn.addSubview(gImgV4TopSide)
            
            //按钮大小设置为与图片大小一致
            gBtn.bounds = gImgV4BottomSide.bounds
        }
    
        @objc func btnDidClick()  {
            let lAni = CAKeyframeAnimation.init(keyPath: "transform.rotation.y")
            lAni.duration = 1
            lAni.values = [0, Double.pi];
            
            //使得动画结束后,保持动画效果
            lAni.isRemovedOnCompletion = false
            lAni.fillMode = kCAFillModeForwards
            
            lAni.delegate = self;
            
            gBtn.layer.add(lAni, forKey: nil)
        }
    }
    
    extension UIViewController: CAAnimationDelegate{
        public func animationDidStart(_ anim: CAAnimation) {
            let lDur:CFTimeInterval = anim.duration
            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + lDur * 0.5) {
                gBtn.bringSubview(toFront: lBool4ChangeImgV == false ? gImgV4BottomSide : gImgV4TopSide)
                lBool4ChangeImgV = !lBool4ChangeImgV
            }
        }
    }
    

    素材:

     

    学无止境,快乐编码。 没有一种不经过蔑视、忍受和奋斗就可以征服的命运。
  • 相关阅读:
    火焰图&perf命令
    C10K问题
    cocosStudio中使用PageView,ListView和ScrollView
    vim基本命令
    Git命令学习总结(-)
    可在 html5 游戏中使用的 js 工具库
    待飞日记(第十一篇)
    待飞日记(第十篇)
    待飞日记(第八天和第九天)
    高质量C++/C编程指南
  • 原文地址:https://www.cnblogs.com/Dast1/p/8038837.html
Copyright © 2011-2022 走看看