ios - 如何重复一个函数并每次更改一个变量?
问题描述
我试图多次重复函数 createCircle() 并且每次我想更改 button.center 值时,我怎样才能做到这一点并且仍然保留每个圆圈的动画?目前,当我尝试通过复制和粘贴具有不同定位的函数 createCircle() 来重复变量时,我的动画 handleTap() 将不适用于其他圆圈。
import UIKit
class SecondViewController: UIViewController {
let shapeLayer = CAShapeLayer()
let percentageLabel: UILabel = {
let label = UILabel()
label.text = ""
label.textAlignment = .center
label.font = UIFont.boldSystemFont(ofSize: 28)
label.textColor = UIColor(red: 0.59, green: 0.42, blue: 0.23, alpha: 1.00)
return label
}()
override func viewDidLoad() {
super.viewDidLoad()
createCircle()
}
func createCircle() {
let trackLayer = CAShapeLayer()
let button = UIButton(type: .custom)
button.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
button.layer.cornerRadius = 0.5 * button.bounds.size.width
button.clipsToBounds = true
button.center = view.center
button.addTarget(self, action: #selector(handleTap), for: .touchUpInside)
view.addSubview(button)
let circularPath = UIBezierPath(arcCenter: .zero, radius: 50, startAngle: 0, endAngle: 2 * CGFloat.pi, clockwise: true)
trackLayer.path = circularPath.cgPath
trackLayer.strokeColor = UIColor(red: 0.82, green: 0.69, blue: 0.52, alpha: 1.00).cgColor
trackLayer.fillColor = UIColor.clear.cgColor
trackLayer.lineWidth = 10
trackLayer.position = view.center
view.layer.addSublayer(trackLayer)
shapeLayer.path = circularPath.cgPath
shapeLayer.strokeColor = UIColor(red: 0.59, green: 0.42, blue: 0.23, alpha: 1.00).cgColor
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.lineWidth = 10
shapeLayer.lineCap = CAShapeLayerLineCap.round
shapeLayer.position = view.center
shapeLayer.transform = CATransform3DMakeRotation(-CGFloat.pi / 2, 0, 0, 1)
view.addSubview(percentageLabel)
percentageLabel.frame = CGRect(x: 0, y: 0, width: 150, height: 150)
percentageLabel.center = view.center
}
var done = 0
var toDo = 0
@objc func handleTap() {
toDo = 5
if done < toDo {
done += 1
} else {
done -= toDo
}
let percentage = CGFloat(done) / CGFloat(toDo)
percentageLabel.text = "\(Int(percentage * 100))%"
DispatchQueue.main.async {
self.shapeLayer.strokeEnd = percentage
}
view.layer.addSublayer(shapeLayer)
}
}
解决方案
推荐阅读
- c++ - QTextStream 用于打印英文和 Unicode 16
- vue.js - Vuetify 显示帮助程序类不起作用
- machine-learning - 使用“gsutil”从 Cloud Storage 存储分区上传到 Google Colab 时出错
- kubernetes - 在将 Pod 分配给 kubernetes 上的节点时,结合 nodeAfinity 和 podAffinity 规则是否是一种好习惯(可行)
- java - 将多条消息路由到 apache camel 中的同一流
- git - Git diff“-”符号是什么意思
- java - Json 解析错误 - 使用 DTO 进行 HTTP 请求时无法识别令牌
- php - 更改网站 URL 的结构是否可能会影响页面在搜索引擎和社交媒体网站上的显示方式?
- php - wpbakery自定义元素嵌套if else条件
- jquery - 如何使用 jquery 更新 ValdationSummary