gpt4 book ai didi

ios - 当 View 重新进入前景时恢复绘制 CAShapeLayer?

转载 作者:行者123 更新时间:2023-11-30 12:47:44 26 4
gpt4 key购买 nike

  func makeACircle(circle: UIView, stokeStart: Double, duration: Double){


var progressCircle = CAShapeLayer();

let centerPoint = CGPoint (x: circle.bounds.width / 2, y: circle.bounds.width / 2);
let circleRadius : CGFloat = circle.bounds.width / 2

var circlePath = UIBezierPath(arcCenter: centerPoint, radius: circleRadius, startAngle: CGFloat(-0.5 * M_PI), endAngle: CGFloat(1.5 * M_PI), clockwise: true );

progressCircle = CAShapeLayer ();
progressCircle.path = circlePath.cgPath;
progressCircle.strokeColor = UIColor.white.cgColor;
progressCircle.fillColor = UIColor.clear.cgColor;
progressCircle.lineWidth = 10;
progressCircle.strokeStart = 0;
progressCircle.strokeEnd = 1;
progressCircle.borderWidth = 1
progressCircle.borderColor = UIColor.black.cgColor

circle.layer.addSublayer(progressCircle);
// progressCircle.clipsToBounds = false
self.view.addSubview(circle)

let animation = CABasicAnimation(keyPath: "strokeEnd")

// Set the animation duration appropriately
animation.duration = duration

// Animate from 0 (no circle) to 1 (full circle)
animation.fromValue = stokeStart
animation.toValue = 1

// Do a linear animation (i.e. the speed of the animation stays the same)
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)

// Set the circleLayer's strokeEnd property to 1.0 now so that it's the
// right value when the animation ends.
progressCircle.strokeEnd = 1.0

// Do the actual animation
progressCircle.add(animation, forKey: "animateCircle")

}

我用上面的代码画了圆圈。它在屏幕上的按钮周围绘制一个圆圈,表示自创建按钮以来所耗时。该代码有效,但是当我进入主屏幕并返回时,无论还剩多少时间,屏幕上的所有圆圈都被完全填满。如果在应用程序中我切换到另一个页面然后返回,它会修复它。

我正在从此 firebase 查询中调用 makeACircle

 currentUserRef?.child("invitedToPosts").queryOrdered(byChild: "timestamp").queryStarting(atValue: cutoff).observe(.childAdded) { (snapshot: FIRDataSnapshot) in 

一旦我获得了有关要制作的按钮的足够信息,我就会制作该按钮,然后调用 makeACircle。

关于如何防止当我从主页加载时圆圈不显示为已到达中风结束的任何想法?

最佳答案

当您暂停动画时,

  • 查看presentation layer并保存其strokeEnd

  • 您需要停止动画,请这样做。您可能需要设置strokeEnd避免任何不和谐的变化。

  • 查看自开始动画以来已经过去了多少时间(例如,比较暂停时的 CACurrentMediaTime() 与开始动画时的值),以便计算出动画还剩多少时间。

然后,当您重新呈现该图层时,您现在拥有 fromValue对于strokeEnd剩下的是什么duration是。

另一件有用的事情是设置 delegate动画,然后使用animationDidStopnil如果动画成功完成(即,如果 finished 为 true),则为“进行中”状态变量。

关于ios - 当 View 重新进入前景时恢复绘制 CAShapeLayer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41410604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com