HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 将UIView的框架和角半径合在一起大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我试图用UIView做一个缩小/成长的圈子.我正在使用UIView.animateWithDuration …(blah blah blah)用于视图的框架,而CABasicAnimation用于为视图的(图层)角半径设置动画.两者都为正确的持续时间设置动画并以正确的圆形值(圆角半径= 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,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")
}

解决方法

我像这样调整我的圈子视图:
- (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的框架和角半径合在一起全部内容,希望文章能够帮你解决ios – 将UIView的框架和角半径合在一起所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。