【Swift】时钟动画

在这里插入图片描述

//
//  ClockViewController.swift
//  eee
//
//  Created by admin on 2022/8/1.
//
// 钟表
import UIKit

class ClockViewController: MainViewController {

    
    // 面板
    lazy var dialLayer: CALayer = {
        let layer = CALayer()
        layer.bounds = CGRect(x: 0, y: 0, width: 200, height: 200)
        layer.position = self.view.center
        layer.contents = UIImage(named: "clock")?.cgImage
        layer.backgroundColor = UIColor.red.cgColor
        return layer
    }()
    
    // 秒针
    lazy var secondHandView: UIView = {
        let view = UIView()
        view.backgroundColor = UIColor.red
        view.bounds = CGRect(x: 0, y: 0, width: 1, height: 70)
        view.layer.anchorPoint = CGPoint(x: 0.5, y: 1)
        view.center = self.view.center
        view.layer.allowsEdgeAntialiasing = true
        return view
    }()

    
    // 分针
    lazy var minuteHandView: UIView = {
        let view = UIView()
        view.backgroundColor = UIColor.darkGray
        view.bounds = CGRect(x: 0, y: 0, width: 3, height: 70)
        view.layer.anchorPoint = CGPoint(x: 0.5, y: 1)
        view.center = self.view.center
        view.layer.allowsEdgeAntialiasing = true
        return view
    }()

    // 时针
    lazy var hourHandView: UIView = {
        let view = UIView()
        view.backgroundColor = UIColor.darkGray
        view.bounds = CGRect(x: 0, y: 0, width: 4, height: 50)
        view.layer.anchorPoint = CGPoint(x: 0.5, y: 1)
        view.center = self.view.center
        view.layer.allowsEdgeAntialiasing = true
        return view
    }()
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "时钟动画"
        
       
        self.view.layer.addSublayer(self.dialLayer)
        self.view.addSubview(self.hourHandView)
        self.view.addSubview(self.minuteHandView)
        self.view.addSubview(self.secondHandView)
        
        let link = CADisplayLink(target: self, selector: #selector(clockRunning))
        
        link.add(to: RunLoop.main, forMode: RunLoop.Mode.default)
    }
    

    @objc func clockRunning(){
        let tzone = TimeZone.current
        var calender = NSCalendar.current
        calender.timeZone = tzone
        
        let currentDate = Date()
        
        let cuttentTime = calender.dateComponents([.second,.hour,.minute], from: currentDate)
        
        // 秒针
        let angle = ( Double.pi * 2 / 60 ) * Double.init(cuttentTime.second ?? 0)
        self.secondHandView.transform = CGAffineTransform(rotationAngle: angle)
        
        // 分针
        let minuteangle = ( Double.pi * 2 / 60 ) * Double.init(cuttentTime.minute ?? 0)
        let secondToMinute = ( Double.pi * 2 / 60 ) * (Double.init(cuttentTime.second ?? 0) / 60)
        self.minuteHandView.transform = CGAffineTransform(rotationAngle: minuteangle + secondToMinute)
        
        // 时针
        let hourangle = ( Double.pi * 2 / 12 ) * Double.init(cuttentTime.hour ?? 0)
        let minuteToHour =  ( Double.pi * 2 / 12 ) * (Double.init((cuttentTime.minute ?? 0) ) / 60)
        self.hourHandView.transform = CGAffineTransform(rotationAngle: hourangle + minuteToHour)
    }
    

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值