CALyer的contents和contentsGravity属性
2016-08-02 14:45
260 查看
原文:http://blog.csdn.net/majiakun1/article/details/50539701点击打开链接
contents属性
CALyer 有一个属性叫做contents,这个属性的类型被定义为id,意味着它可以是任何类型的对象。在这种情况下,你可以给contents属性赋任何值,你的app仍然能够编译通过。但是,在实践中,如果你给contents赋的不是CGImage,那么你得到的图层将是空白的。
contents这个奇怪的表现是由Mac OS的历史原因造成的。它之所以被定义为id类型,是因为在Mac OS系统上,这个属性对CGImage和NSImage类型的值都起作用。如果你试图在iOS平台上将UIImage的值赋给它,只能得到一个空白的图层。一些初识Core Animation的iOS开发者可能会对这个感到困惑。
头疼的不仅仅是我们刚才提到的这个问题。事实上,你真正要赋值的类型应该是CGImageRef,它是一个指向CGImage结构的指针。UIImage有一个CGImage属性,它返回一个"CGImageRef",如果你想把这个值直接赋值给CALayer的contents,那你将会得到一个编译错误。因为CGImageRef并不是一个真正的Cocoa对象,而是一个Core Foundation类型。
尽管Core Foundation类型跟Cocoa对象在运行时貌似很像(被称作toll-free bridging),他们并不是类型兼容的,不过你可以通过bridged关键字转换。如果要给图层的寄宿图赋值,你可以按照以下这个方法:
如果你没有使用ARC(自动引用计数),你就不需要__bridge这部分。但是,你干嘛不用ARC?!
contentsGravity属性
CALayer与 contentMode对应的属性叫做contentsGravity,但是它是一个NSString类型,而不是像对应的UIKit部分,那里面的值是枚举。contentsGravity可选的常量值有以下一些:
和cotentMode一样,contentsGravity的目的是为了决定内容在图层的边界中怎么对齐,我们将使用kCAGravityResizeAspect,它的效果等同于UIViewContentModeScaleAspectFit, 同时它还能在图层中等比例拉伸以适应图层的边界。
contents属性
CALyer 有一个属性叫做contents,这个属性的类型被定义为id,意味着它可以是任何类型的对象。在这种情况下,你可以给contents属性赋任何值,你的app仍然能够编译通过。但是,在实践中,如果你给contents赋的不是CGImage,那么你得到的图层将是空白的。
contents这个奇怪的表现是由Mac OS的历史原因造成的。它之所以被定义为id类型,是因为在Mac OS系统上,这个属性对CGImage和NSImage类型的值都起作用。如果你试图在iOS平台上将UIImage的值赋给它,只能得到一个空白的图层。一些初识Core Animation的iOS开发者可能会对这个感到困惑。
头疼的不仅仅是我们刚才提到的这个问题。事实上,你真正要赋值的类型应该是CGImageRef,它是一个指向CGImage结构的指针。UIImage有一个CGImage属性,它返回一个"CGImageRef",如果你想把这个值直接赋值给CALayer的contents,那你将会得到一个编译错误。因为CGImageRef并不是一个真正的Cocoa对象,而是一个Core Foundation类型。
尽管Core Foundation类型跟Cocoa对象在运行时貌似很像(被称作toll-free bridging),他们并不是类型兼容的,不过你可以通过bridged关键字转换。如果要给图层的寄宿图赋值,你可以按照以下这个方法:
contentsGravity属性
CALayer与 contentMode对应的属性叫做contentsGravity,但是它是一个NSString类型,而不是像对应的UIKit部分,那里面的值是枚举。contentsGravity可选的常量值有以下一些:
相关文章推荐
- Apache virtual contents configuratiion
- 为自己的RCP程序添加帮助内容(Help Contents)
- 使用JXL进行EXCEL上传,cell.getContents()不能取得字段内容
- file_get_contents高级应用
- force contents not break line
- PHP利用Curl、socket、file_get_contents POST数据
- file_put_contents 保存文件时乱码
- PHP的file_get_contents设置超时
- SQL Server 2008事务日志的[RowLog Contents 0] 字段没人能解析出来?
- 简评file_get_contents与curl 效率及稳定性
- PHP中创建空文件的代码[file_put_contents vs touch]
- 同时替换<?php和<?||file_get_contents的使用
- obj-c iOS 数组存入程序文件 arrayWithContentsOfFile
- PHP解决[function.file-get-contents]: failed to open stream: HTTP request failed!
- PHP经验——输出缓冲区处理函数:ob_start、ob_get_contents、ob_end_clean、ob_end_flush
- Accessing the contents of a KVM disk image file
- initWithContentsOfURL issue
- 软件随想录(local.joelonsoftware.com/wiki)-2006年01月30日 卓越设计:目录 - Great Design - Table of Contents
- Directory Listing Denied This Virtual Directory does not allow contents to be listed.
- imageNamed/ imageWithContentsOfFile /imageWithData 的区别