【问题标题】:CALayer Position Contents to Bottom LeftCALayer 将内容定位到左下角
【发布时间】:2012-04-06 13:25:58
【问题描述】:

我正在尝试在 CALayer 上绘制图像。我只需要一张图片,所以我创建了我的后期如下:

CALayer *layer = [CALayer layer];

我按如下方式添加我的图像:

NSImage *img = [[NSImage alloc] initWithContentsOfFile:@"path/to/img.png"];
[layer setContents:img];

这可行,但它会绘制我的图像以填充整个父框架(在此过程中拉伸我的图像)。

阅读文档,我发现以下内容:

[layer setContentsGravity:@"kCAGravityBottomLeft"];

我试图在父框架的左下角绘制我的图像,但是无论我做什么,它都会在底部中心绘制我的图标。反正有指定左下角吗?

【问题讨论】:

  • 如何设置图层的帧大小以与图像尺寸完全匹配,并使用将其定位在相对于视图的位置的原点?重新拉伸,查看 UIView 的 sizeToFitsizeThatFits。但我对图像的工作不多,所以这主要是猜测。
  • @Wienke 先试过了,它似乎坚持要留在图像的底部中心。

标签: objective-c macos core-animation


【解决方案1】:

试试这个:

CALayer *layer = [CALayer layer];
layer.contentsGravity = kCAGravityBottomLeft;
layer.contents = (id) aCGImageRef;

请注意,kCAGravityBottomLeft 被声明为 NSStringcontents 属性需要 CGImageRef

【讨论】:

  • 虽然这行得通,但它只是完成了我已经完成的工作。这是什么问题。
  • 那么您希望图像绘制在 layer 的边界还是在 layer 的 superlayer 的边界?如果是后者,只要调整超级层的大小,只需将层的框架设置为其超级层的边界即可。使用NSViews 更容易,因为您可以设置自动调整大小的掩码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 2012-08-31
  • 2011-07-16
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多