ios - 如何在单个文件中定义的多个视图控制器中使用属性?
问题描述
我制作了一个制作圆形动画的功能。函数以 radius:float 作为输入。我已经在 ViewController 类中完成了此操作,并且该视图控制器工作正常。但是现在我想在多个视图控制器上使用这个动画,并且不想在每个视图控制器上编写相同的代码。所以我想知道如何在一个单独的文件中创建这个函数,这样我只需要用半径调用函数就可以了。或者你能告诉我这样做的最佳做法吗?提前致谢。
//
我不想在 myViewController 中这样做,我只想为循环动画创建一个新类。并且也不想导入想要这样做的那个类-
import UIKit
class CircularProgressView {
private let shapeLayer = CAShapeLayer()
public func createProgressView(radius:CGFloat,forView:UIView) {
let center = forView.center
let circularPath = UIBezierPath(arcCenter: center, radius: radius, startAngle: -CGFloat.pi/2, endAngle: 2*CGFloat.pi, clockwise: true)
let trackLayer = CAShapeLayer()
trackLayer.path = circularPath.cgPath
trackLayer.strokeColor = UIColor.lightGray.cgColor
trackLayer.fillColor = UIColor.clear.cgColor
trackLayer.lineWidth = 10
forView.layer.addSublayer(trackLayer)
shapeLayer.path = circularPath.cgPath
shapeLayer.strokeColor = UIColor.red.cgColor
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.lineWidth = 10
shapeLayer.lineCap = .round
shapeLayer.strokeEnd = 0
forView.layer.addSublayer(shapeLayer)
forView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap)))
}
@objc private func handleTap() {
print("hello s")
let basicAnimation = CABasicAnimation(keyPath: "strokeEnd")
basicAnimation.toValue = 1
basicAnimation.duration = 2
basicAnimation.fillMode = .forwards
basicAnimation.isRemovedOnCompletion = false
shapeLayer.add(basicAnimation, forKey: "basic")
}
}
并使用这个like-import UIKit
class ViewController1: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
CircularProgressView().createProgressView(radius: 50, forView: view)
}
}
但在此代码中,访客识别器无法正常工作。
解决方案
您可以使用相关代码简单地创建一个UIViewController
extension
并在其中添加一个方法animate(with:)
,
extension UIViewController {
func animate(with radius: Float) {
//add your code here..
}
}
该方法animate(with:)
现在可用于所有UIViewController
子类。所以,你可以简单地这样称呼它
class VC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.animate(with: 10.0)
}
}
class
在这种情况下,无需创建任何父级。
推荐阅读
- java - 如何控制 JSeparator 的大小?
- html - How can line breaks be added to a data:text/plain URI?
- jsdoc - 在函数中的参数上使用 jsdoc 内联
- javascript - 如何在表格单元格之间添加空格?
- elasticsearch - Elastic Canvas 日期格式
- sql - 通过连接范围内的两个表来评定总和
- c - Luhn 算法的 for 循环中的未知值
- reactjs - 如何使用 reactjs 在按钮单击时正确显示加载事件
- android - How to inject repository to the interceptor in android architecture components?
- angular - 使用@Input 在组件之间传递数据并使用路由器插座?