ios – 使用移动框架动画CAShapeLayer

ios – 使用移动框架动画CAShapeLayer,第1张

概述使用核心动画层,我一直在尝试实现以下功能.在包含的超级层中,有两个锚层,另一个连接两个层.下图应该清楚说明情况.在左侧,两个橙色锚点标记为“A”和“B”,绿线连接它们.使用虚线示出封闭层框架.在右边,层层次结构显示为我当前实现它,其中锚点和连接都是封闭超层的子层. 现在,我要做的是让锚点四处移动,并保持连接的连接.我正在使用下面显示的代码更新其框架和路径属性,利用连接层的-setFrame:方法: 使用核心动画层,我一直在尝试实现以下功能.在包含的超级层中,有两个锚层,另一个连接两个层.下图应该清楚说明情况.在左侧,两个橙色锚点标记为“A”和“B”,绿线连接它们.使用虚线示出封闭层框架.在右边,层层次结构显示为我当前实现它,其中锚点和连接都是封闭超层的子层.

现在,我要做的是让锚点四处移动,并保持连接的连接.我正在使用下面显示的代码更新其框架和路径属性,利用连接层的-setFrame:方法:

– (voID)setFrame:(CGRect)frame {

CGSize size = frame.size;CGPoint startPoint = CGPointZero;if (size.height < 0.0) startPoint.y -= size.height;CGPathref oldpath = self.path;CGMutablePathref path = CGPathCreateMutable();CGPathMovetoPoint(path,NulL,startPoint.x,startPoint.y);CGPathAddlinetoPoint(path,startPoint.x + size.wIDth,startPoint.y + size.height);CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"path"];animation.duration = [CATransaction animationDuration];animation.timingFunction = [CATransaction animationTimingFunction];animation.fromValue = (ID)oldpath;animation.tovalue = (ID)path;[self addAnimation:animation forKey:@"pathAnimation"];self.path = path;CGPathRelease(path);[super setFrame:frame];

}

现在,这种工作,但问题是框架(或位置边界)动画不与路径动画同步运行,导致一些紧张的影响,连接的远端瞬间分离(和一些其他小问题,可能是由同一个核心问题引起的).

我一直在努力解决这个问题,但只是为了取得成功.有一次,我将连接的帧设置为等于封闭超层的帧,它确实具有所需的效果(因为现在帧不再需要动画).但是,我担心这个解决方案在具有多个连接的环境中的性能 – 即.多个非不透明,大尺寸重叠层似乎不好?

有人会有更好,更优雅的解决方案吗?谢谢!

解决方法 由于您只是实际拉伸(缩放)并旋转连接层,您是否考虑过对其应用转换而不是手动修改框架?

您应该能够使用基于锚定层的位置的一些基本三角函数来计算旋转角度和缩放因子.

总结

以上是内存溢出为你收集整理的ios – 使用移动框架动画CAShapeLayer全部内容,希望文章能够帮你解决ios – 使用移动框架动画CAShapeLayer所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/999635.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存