移动CALayer位置完全被超级CALayer封装
Posted
技术标签:
【中文标题】移动CALayer位置完全被超级CALayer封装【英文标题】:Move CALAyer position to be entirely encapsulated by super CALayer 【发布时间】:2015-04-20 09:39:07 【问题描述】:我有两个 CALayer,一个要拖到另一个中。如果拖动的 CALayer 不完全在目标 CALayer 内,我想将它移动到它(不是到设定点,只是到可能关闭的点,这意味着该层完全在目标层内)。我真的不确定是否有一种简单的方法可以实现这一目标?
我正在检查以下内容,
if (!CGRectContainsRect(destinationLayer.frame, draggedLayer.frame))
NSLog(@"Not completely with container");
谢谢
【问题讨论】:
【参考方案1】:首先,您应该确保移动层必须小于外部层。
然后,如果它在左侧,则可以使 min x 等于外部的 min x,如果在另一侧,则可以使 max x 等于 max x。
y 轴方向相同。
//x轴代码如下,y轴类似
if in.frame.origin.x < out.frame.origin.x
in.frame.origin = out.frame.origin.x //In objective-c you cannot set it directly like this, it only works in swift!!!!
else if in.frame.origin.x > out.frame.origin.x
in.frame.origin = out.frame.origin.x
我认为这是最简单的方法。另外你应该注意transform,因为frame是一个计算属性,它是图层的边界框,所以这个过程和上面的没有什么不同。
【讨论】:
感谢您的回复,我将如何设置最小 x 位置?例子会很有帮助 我补充一点,如果你使用objective-c,请和之前一样注意设置的框架代码,swift代码在objective-c中不起作用。以上是关于移动CALayer位置完全被超级CALayer封装的主要内容,如果未能解决你的问题,请参考以下文章