【问题标题】:Move CALAyer position to be entirely encapsulated by super CALayer移动CALayer位置完全被超级CALayer封装
【发布时间】:2015-04-20 09:39:07
【问题描述】:

我有两个 CALayer,一个要拖到另一个中。如果拖动的 CALayer 不完全在目标 CALayer 内,我想将它移动到它(不是到设定点,只是到可能关闭的点,这意味着该层完全在目标层内)。我真的不确定是否有一种简单的方法可以实现这一目标?

我正在检查以下内容,

if (!CGRectContainsRect(destinationLayer.frame, draggedLayer.frame)) {

                NSLog(@"Not completely with container");
            }

谢谢

【问题讨论】:

    标签: ios objective-c xcode calayer cgrect


    【解决方案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中不起作用。
    猜你喜欢
    • 2023-04-02
    • 2011-11-12
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 2012-11-02
    • 2012-01-09
    • 2019-04-18
    • 1970-01-01
    相关资源
    最近更新 更多