繁体   English   中英

如何在CALayer中定位“ contents” png?

[英]How do I position `contents` png in CALayer?

我是否必须移动图层框架或对图层应用转换矩阵变换? 或者也许我可以将contents移动到图层内部? 如果内容在图层内部不可移动,则最初将如何定位?

CALayer具有框架(或等效地,边界和原点),该框架在逻辑上用于确定要绘制的内容。 当调用drawInContext:或等效方法时,框架决定了内容的生成方式。

但是,像OS X一样,iOS采用了复合窗口管理器,这意味着视图知道如何将其输出绘制到缓冲区中,并且将缓冲区合并以创建视图,而窗口管理器会确定如何处理缓存和视频内存管理之间。

如果调整视图或图层类的transform属性,则调整合成的方式。 但是,drawInContext:的结果应该仍然明确相同,以便窗口管理器知道它可以只使用缓存的图像。

因此,例如,如果您设置了一个尺寸为128x128的帧,然后进行了将CALayer缩放为两倍的转换,则您将占据屏幕的256x256区域,但是用于合成的图像大小仅为128x128源像素分成四个目标像素。 如果设置尺寸为256x256的帧并进行身份转换,则将覆盖相同数量的屏幕空间,但每个源像素与目标像素的比例为1:1。

副作用是,更改框架会导致重蹈覆辙。 更改变换不会。 因此,后者通常更快,如果您决定使用CATiledLayer(在Safari,Maps等中使用)之类的东西来绘制单独的线程,并且可能需要一段时间才能得出结果,这也是要做的事情。

根据经验,您可以使用框架设置初始位置并更新框架以进行常规工作。 您可以使用变换进行过渡和其他特殊效果。 但是,从CoreAnimation的角度来看,CATiledLayer的所有frame和transform属性都是可动画的,因此实际上仍由您决定。

大多数人不使用CALayer级别,但更喜欢使用UIViews。 在这种情况下,注释基本相同,但需要注意的是,您可以调整视图的[2d]变换或视图层的[3d]变换,让合成器将其全部弄清楚,但将框架更改为提示重画。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM