使用核心动画层,我一直在尝试实现以下功能.在包含的超级层中,有两个锚层,另一个连接两个层.下图应该清楚说明情况.在左侧,两个橙色锚点标记为“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];
}
现在,这种工作,但问题是框架(或位置边界)动画不与路径动画同步运行,导致一些紧张的影响,连接的远端瞬间分离(和一些其他小问题,可能是由同一个核心问题引起的).
我一直在努力解决这个问题,但只是为了取得成功.有一次,我将连接的帧设置为等于封闭超层的帧,它确实具有所需的效果(因为现在帧不再需要动画).但是,我担心这个解决方案在具有多个连接的环境中的性能 – 即.多个非不透明,大尺寸重叠层似乎不好?
有人会有更好,更优雅的解决方案吗?谢谢!