CALayer 协调不稳定的行为

发布于 2024-12-08 17:06:42 字数 689 浏览 1 评论 0原文

我在使用 CALayers 时遇到了一些麻烦。我创建一个添加到 UIImageView 的图层。我希望该图层在屏幕中获得与另一个视图相同的位置,就好像它是它的副本一样。但是当图层被添加到 UIImageView 中时,它的坐标在 NSLog 中与“复制”视图相同,但图层位置永远不会相同,每次我尝试都会看到不同的东西。我应该缺少一些东西。

    CALayer*layer=[CALayer layer];
        layer.bounds =copiedImageView.bounds;
        layer.contents=copiedImageView.layer.contents;


       CGPoint theCenter=[targetImageView convertPoint:copiedImageView.center fromView:self.view];            
       [layer setPosition:theCenter];    

        [targetImageView.layer addSublayer:layer];
        copiedImageView.layer.hidden=YES;

如果我显式设置layer.position,它似乎可以工作(例如(0,0),图层中心始终位于targetImageView的左上角),这是合乎逻辑的。

非常感谢任何帮助!

I am having some troubles for a while with CALayers. I create a layer that I add to a UIImageView. I want this layer to get the same position in the screen that another view, as if it was a copy of it. But as the layer is added to the UIImageView, its coordinates are the same in NSLog as the "copied" view, but the layer position is never the same, each time I try I see something different. I should be missing something.

    CALayer*layer=[CALayer layer];
        layer.bounds =copiedImageView.bounds;
        layer.contents=copiedImageView.layer.contents;


       CGPoint theCenter=[targetImageView convertPoint:copiedImageView.center fromView:self.view];            
       [layer setPosition:theCenter];    

        [targetImageView.layer addSublayer:layer];
        copiedImageView.layer.hidden=YES;

If I set the layer.position explicitly it seems to work (ex. to (0,0) the layer center is always on the upper left corner of the targetImageView), which is logical.

Any help is very much appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时光瘦了 2024-12-15 17:06:42

设置框架,而不是边界。框架确定图层相对于其父图层的定位方式。

layer.frame =copiedImageView.frame;

除非你应用了变换。然后,您将通过单独设置边界和位置,以大致正确的方式进行操作。

Set the frame, not the bounds. Frame determines how a layer is positioned relative to its parent layer.

layer.frame =copiedImageView.frame;

Unless you have a transform applied. Then you are doing it approximately the correct way, by separately setting bounds and position.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文