iOS CoreAnimation-寄宿图

By | 2016年7月18日

contents属性

CALayer有一个属性叫做 content ,这个属性的类型被定义为id,意味着它可以是任何类型的对象。在这种情况下,你可以给contents 属性赋任何值,你的app仍然能够编译通过。但是,在实践中,如果你给contents 赋的不是CGImage,那么你得到的图层将是空白的。

contents这个奇怪的表现是由Mac OS的历史原因造成的。它之所以被定义为id类型,是因为在Mac OS系统上,这个属性对CGImage和NSImage类型的值斗气作用。如果你试图在iOS平台上将UIImage的值赋给它,只得到一个空白的图层。

事实上,你真正要赋值的类型应该是CGImageRef,它是一个指向CGImage结构的指针。UIImage有一个CGImage属性,它返回一个“CGImageRef”,如果你想把这个值直接赋值给CALayer的contents,那么你将会得到一个编译错误。因为CGImageRef并不是一个真正的Cocoa对象,而是一个Core Foundation类型。

 

contentGravity

使用UIImageView的时候为了适应视图,解决方法是把contentMode属性设置成合适的值。

view.contentMode = UIViewContentModeScaleAspectFit;

不过UIView大多数视觉相关的属性比如contentMode,对这些属性的操作其实是对对应图层的操作。

CALayer与contentMode对应的属性叫做contentsGravity,但是它是一个NSString类型,而不是像对应的UIKit部分,那里面的值是枚举。contentsGravity可选的常量有以下一些:

  • kCAGravityCenter
  • kCAGravityTop
  • kCAGravityBottom
  • kCAGravityLeft
  • kCAGravityRight
  • kCAGravityTopLeft
  • kCAGravityTopRight
  • kCAGravityBottomLeft
  • kCAGravityBottomRight
  • kCAGravityResize
  • kCAGravityResizeAspect
  • kCAGravityResizeAspectFill

和contentMode一样,contentsGravity的目的是为了决定内容在图层的边界中怎么对齐。

contentsScale

 

Category: iOS

发表评论

电子邮件地址不会被公开。 必填项已用*标注