日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android sdio 时钟 ios-clock,iOS 炫酷时钟

發布時間:2024/4/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android sdio 时钟 ios-clock,iOS 炫酷时钟 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

import UIKit

/// 每個數字指針的組件

class ComponentView: UIView {

lazy var timeLabel: UILabel = {

let label = UILabel()

label.textColor = .timeColor

label.backgroundColor = .randomColor

label.font = UIFont.timeFont

label.isUserInteractionEnabled = false

return label

}()

override init(frame: CGRect) {

super.init(frame: frame)

setupView()

}

required init?(coder aDecoder: NSCoder) {

super.init(coder: aDecoder)

setupView()

}

func setupView() {

timeLabel.frame = CGRect(x: bounds.width - 30, y: 0, width: 30, height: bounds.height)

addSubview(timeLabel)

}

}

/// 每一圈輪盤的視圖(月,日,時,分,秒)

class TimeView: UIView {

let unit: String

let start: Int

let end: Int

init(frame: CGRect, unit: String, start: Int, end: Int) {

self.unit = unit

self.start = start

self.end = end

super.init(frame: frame)

drawTime()

isUserInteractionEnabled = false

}

required init?(coder aDecoder: NSCoder) {

fatalError("init(coder:) has not been implemented")

}

func drawTime() {

for index in start...end {

let component = ComponentView(frame: CGRect(x: center.x, y: center.y, width: bounds.width / 2, height: 30))

component.timeLabel.text = String(format: "%0.2ld\(unit)", index)

addSubview(component)

component.layer.anchorPoint = CGPoint(x: 0, y: 0.5)

component.layer.position = center

let angle = -CGFloat.pi * 2 * CGFloat(index) / CGFloat(end - start + 1)

component.transform = component.transform.rotated(by: angle)

}

}

}

/// 輪盤時鐘視圖

class ClockView: UIView {

lazy var offset: CGFloat = {

return bounds.width / 6

}()

/// 秒

lazy var secondView: UIView = {

let view = TimeView(frame: CGRect(x: 0, y: 0, width: bounds.width, height: bounds.width), unit: "秒", start: 0, end: 59)

view.center = center

return view

}()

/// 分

lazy var minuteView: UIView = {

let view = TimeView(frame: CGRect(x: 0, y: 0, width: bounds.width - offset, height: bounds.width - offset), unit: "分", start: 0, end: 59)

view.center = center

return view

}()

/// 時

lazy var hourView: UIView = {

let view = TimeView(frame: CGRect(x: 0, y: 0, width: bounds.width - offset * 2, height: bounds.width - offset * 2), unit: "時", start: 0, end: 23)

view.center = center

return view

}()

/// 日

lazy var dayView: UIView = {

let view = TimeView(frame: CGRect(x: 0, y: 0, width: bounds.width - offset * 3, height: bounds.width - offset * 3), unit: "日", start: 1, end: Date().monthLength)

view.center = center

return view

}()

/// 月

lazy var monthView: UIView = {

let view = TimeView(frame: CGRect(x: 0, y: 0, width: bounds.width - offset * 4, height: bounds.width - offset * 4), unit: "月", start: 1, end: 12)

view.center = center

return view

}()

/// 年

lazy var yearLabel: UILabel = {

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 50))

label.center = center

label.textColor = .timeColor

label.textAlignment = .center

label.backgroundColor = .randomColor

label.font = UIFont.timeFont

return label

}()

var timer: Timer?

override init(frame: CGRect) {

super.init(frame: frame)

setupView()

timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(handleTick), userInfo: nil, repeats: true)

}

required init?(coder aDecoder: NSCoder) {

super.init(coder: aDecoder)

setupView()

}

func setupView() {

addSubview(secondView)

addSubview(minuteView)

addSubview(hourView)

addSubview(dayView)

addSubview(monthView)

addSubview(yearLabel)

}

@objc func handleTick() {

let date = Date()

// 普通動畫

// UIView.animate(withDuration: 1) {

// self.secondView.transform = CGAffineTransform.init(rotationAngle: CGFloat.pi * 2 * CGFloat(date.second.intValue + 1) / 60)

// self.minuteView.transform = CGAffineTransform.init(rotationAngle: CGFloat.pi * 2 * CGFloat(date.minute.intValue) / 60)

// self.hourView.transform = CGAffineTransform.init(rotationAngle: CGFloat.pi * 2 * CGFloat(date.hour.intValue) / 24)

// self.dayView.transform = CGAffineTransform.init(rotationAngle: CGFloat.pi * 2 * CGFloat(date.day.intValue) / CGFloat(date.monthLength))

// self.monthView.transform = CGAffineTransform.init(rotationAngle: CGFloat.pi * 2 * CGFloat(date.month.intValue) / 12)

// self.yearLabel.text = "\(date.year)年"

// }

// 彈簧動畫

UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.2, options: UIView.AnimationOptions.curveEaseInOut, animations: {

self.secondView.transform = CGAffineTransform.init(rotationAngle: CGFloat.pi * 2 * CGFloat(date.second.intValue + 1) / 60)

self.minuteView.transform = CGAffineTransform.init(rotationAngle: CGFloat.pi * 2 * CGFloat(date.minute.intValue) / 60)

self.hourView.transform = CGAffineTransform.init(rotationAngle: CGFloat.pi * 2 * CGFloat(date.hour.intValue) / 24)

self.dayView.transform = CGAffineTransform.init(rotationAngle: CGFloat.pi * 2 * CGFloat(date.day.intValue) / CGFloat(date.monthLength))

self.monthView.transform = CGAffineTransform.init(rotationAngle: CGFloat.pi * 2 * CGFloat(date.month.intValue) / 12)

self.yearLabel.text = "\(date.year)年"

}, completion: nil)

}

deinit {

timer?.invalidate()

timer = nil

}

}

/// 日期的擴展

public extension Date {

/// 獲取當前月的所有天數

var monthLength: Int {

let calendar = Calendar.current

let range = calendar.range(of: Calendar.Component.day, in: Calendar.Component.month, for: Date())

return range?.count ?? 30

}

/// 獲取當前時間的年份

var year: String {

return string(from:"yyyy")

}

/// 獲取當前時間的月份

var month: String {

return string(from: "MM")

}

/// 獲取當前時間的所在日

var day: String {

return string(from: "dd")

}

/// 獲取當前時間的小時

var hour: String {

return string(from: "HH")

}

/// 獲取當前時間的分鐘

var minute: String {

return string(from: "mm")

}

/// 獲取當前時間的秒

var second: String {

return string(from: "ss")

}

private func string(from format: String) -> String {

let dateFormatter = DateFormatter()

dateFormatter.dateFormat = format

return dateFormatter.string(from: self)

}

}

/// 字符串的擴展

public extension String {

var intValue: Int {

return Int(self) ?? 0

}

}

/// 字體擴展

public extension UIFont {

static var timeFont: UIFont {

return UIFont.systemFont(ofSize: 10)

}

}

/// 顏色擴展

public extension UIColor {

static var randomColor: UIColor {

let red = CGFloat.random(in: 0.0...1.0)

let green = CGFloat.random(in: 0.0...1.0)

let blue = CGFloat.random(in: 0.0...1.0)

let alpha = CGFloat.random(in: 0.0...0.0)

return UIColor(red: red, green: green, blue: blue, alpha: alpha)

}

static var timeColor: UIColor {

return white

}

}

總結

以上是生活随笔為你收集整理的android sdio 时钟 ios-clock,iOS 炫酷时钟的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。