点击按钮每次都能实现图片的旋转和切换(swift)

前端之家收集整理的这篇文章主要介绍了点击按钮每次都能实现图片的旋转和切换(swift)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

效果如图:

代码如下:

  1. //
  2. // ViewController.swift
  3. // TwoSidedView
  4. //
  5. // Created by mayl on 2017/12/14.
  6. // Copyright © 2017年. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10.  
  11. let gBtn = UIButton.init(type: UIButtonType.custom)
  12. let gImgV4BottomSide = UIImageView.init(image: UIImage.init(named: "bottomSide"))
  13. let gImgV4TopSide = UIImageView.init(image: UIImage.init(named: "topSide"))
  14.  
  15. var lBool4ChangeImgV : Bool = false
  16. class ViewController: UIViewController {
  17. override func viewDidLoad() {
  18. super.viewDidLoad()
  19. setUpUI()
  20. }
  21. func setUpUI() {
  22. view.addSubview(gBtn)
  23. gBtn.addTarget(self,action: #selector(ViewController.btnDidClick),for: UIControlEvents.touchUpInside)
  24. gBtn.center = view.center
  25. gBtn.addSubview(gImgV4BottomSide)
  26. gBtn.layer.transform = CATransform3DMakeRotation(CGFloat(Double.pi),1,0)
  27. gBtn.addSubview(gImgV4TopSide)
  28. //按钮大小设置为与图片大小一致
  29. gBtn.bounds = gImgV4BottomSide.bounds
  30. }
  31.  
  32. @objc func btnDidClick() {
  33. let lAni = CAKeyframeAnimation.init(keyPath: "transform.rotation.y")
  34. lAni.duration = 1
  35. lAni.values = [0,Double.pi];
  36. //使得动画结束后,保持动画效果
  37. lAni.isRemovedOnCompletion = false
  38. lAni.fillMode = kCAFillModeForwards
  39. lAni.delegate = self;
  40. gBtn.layer.add(lAni,forKey: nil)
  41. }
  42. }
  43.  
  44. extension UIViewController: CAAnimationDelegate{
  45. public func animationDidStart(_ anim: CAAnimation) {
  46. let lDur:CFTimeInterval = anim.duration
  47. DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + lDur * 0.5) {
  48. gBtn.bringSubview(toFront: lBool4ChangeImgV == false ? gImgV4BottomSide : gImgV4TopSide)
  49. lBool4ChangeImgV = !lBool4ChangeImgV
  50. }
  51. }
  52. }

素材:

 

 

猜你在找的iOS相关文章