gpt4 book ai didi

ios - 一起动画 UIView 的框架和圆角半径

转载 作者:可可西里 更新时间:2023-11-01 03:31:11 24 4
gpt4 key购买 nike

所以我想用 UIView 做一个缩小/扩大的圆圈。我正在使用 UIView.animateWithDuration...(blah blah blah)作为 View 的框架,并使用 CABasicAnimation 来为 View (图层)的角半径设置动画。两者都以正确的持续时间进行动画处理,并以正确的圆形值(圆角半径 = 1/2 宽度)结束。问题是在动画期间,CABasicAnimation 和 UIView.animateWithDuration 似乎有不同的动画曲线。我怎样才能获得合适的圆圈大小的动画。

如果答案是为农场膨胀使用 CABAsicAnimation,请解释如何做到这一点。

谢谢!


代码:

此代码位于 UIView 的扩展中。

//This is how it's being used to shrink the circle:

circleview.growByPixles(-10, seconds: 0.3, completion: {})
circleview.setCornerRadius(radius:(circleview.bounds.size.width - 10) / 2 seconds: 0.3)

//////

func morphToFrame(frame: CGRect, seconds: Double, completion: () -> ()) {
UIView.animateWithDuration(seconds,
animations: {
self.frame = frame
},
completion: { _ in
completion()
})
}

//negative integers shrink
func growByPixels(pixels: CGFloat, seconds: Double, completion: () -> ()) {
var f:CGRect = self.frame

var newFrame:CGRect = CGRect(x: f.origin.x - pixels/2, y: f.origin.y - pixels/2, width: f.size.width + pixels, height: f.size.height + pixels)

self.morphToFrame(newFrame, seconds: seconds, completion: completion)
}

func setCornerRadius(radius: CGFloat, seconds: Double) {

self.layer.masksToBounds = true

var animation = CABasicAnimation(keyPath: "cornerRadius")
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
animation.fromValue = NSNumber(float: Float(self.layer.cornerRadius))
self.layer.cornerRadius = radius
animation.duration = seconds
self.layer.addAnimation(animation, forKey: "cornerRadius")
}

最佳答案

我像这样调整我的圈 subview :

- (void)resizeCircleView:(CGRect)frame {

CGRect estimateFrame = frame;
float duration = 1.0f;

[UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
[circle setFrame:estimateFrame];
} completion:nil];

CGFloat estimateCorner = estimateFrame.size.width / 2;
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"cornerRadius"];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation.fromValue = @(circle.layer.cornerRadius);
animation.toValue = @(estimateCorner);
animation.duration = duration;
[circle.layer setCornerRadius:estimateCorner];
[circle.layer addAnimation:animation forKey:@"cornerRadius"];
}

关于ios - 一起动画 UIView 的框架和圆角半径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26769796/

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