使用核心动画层,我一直在尝试实现以下功能.在包含的超级层中,有两个锚层,另一个连接两个层.下图应该清楚说明情况.在左侧,两个橙色锚点标记为“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];
}
现在,这种工作,但问题是框架(或位置边界)动画不与路径动画同步运行,导致一些紧张的影响,连接的远端瞬间分离(和一些其他小问题,可能是由同一个核心问题引起的).
我一直在努力解决这个问题,但只是为了取得成功.有一次,我将连接的帧设置为等于封闭超层的帧,它确实具有所需的效果(因为现在帧不再需要动画).但是,我担心这个解决方案在具有多个连接的环境中的性能 – 即.多个非不透明,大尺寸重叠层似乎不好?
有人会有更好,更优雅的解决方案吗?谢谢!
解决方法
由于您只是实际拉伸(缩放)并旋转连接层,您是否考虑过对其应用转换而不是手动修改框架?
您应该能够使用基于锚定层的位置的一些基本三角函数来计算旋转角度和缩放因子.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。