跟着大神一起进步,本篇博客原文地址:http://blog.csdn.net/hello_hwc?viewmode=contents

一 CALayer是什么?

Layers是绘图和动画的基础,  Layer是在3D空间中的2D平面。Layer管理的几何(例如rotate,transfrom),内容(image等),和可视属性(backgroundColor,alpha)等信息。Layer主要通过管理bitmap来维护自己的状态信息,从这一点上来说,Layer可以看作对象模型,因为他们主要用来管理数据。

Layer是基于bitmap的,它会捕获View要呈现的内容,然后cache在一个bitmap中,这个bitmap可以看作一个对象。这样每次进行操作,例如平移旋转等,只是bitmap的矩阵运算。基于Layer的动画过程如图

由于基于Layer的绘制是处理静态的Bitmap的,而bitmap的处理又是GPU所擅长的,所以它的效率要比基于View绘制的高很多,因为基于View绘制的每次都要进行drawRect的调用重新绘制。

二 Layer支持继承 支持添加新的SubLayer 支持对sublayer进行层次调整

常见的Layer子类

管理Layer内容的几个函数

addSublayer:
insertSublayer:above:
insertSublayer:atIndex:
insertSublayer:below:
removeFromSuperlayer
replaceSublayer:with:

三 直接设置UIView 的Layer

先看一个示例,然后我们列出常用的属性,最后就是找几个比较不容易理解的属性单独分析

现在Stroyboard上拖拽一个UIView。然后control+drag出一个IBOutlet,命名为containView

@property (weak, nonatomic) IBOutlet UIView *containView;

在ViewDidLoad 中添加如下代码

    self.containView.layer.backgroundColor = [UIColor lightGrayColor].CGColor;//背景颜色 使用CGColor
self.containView.layer.cornerRadius = 20.0;//圆角
self.containView.layer.shadowColor = [UIColor blueColor].CGColor;//阴影颜色
self.containView.layer.shadowOpacity = 0.8;//阴影透明度
self.containView.layer.shadowOffset = CGSizeMake(3.0, 3.0);
self.containView.layer.borderWidth = 2.0f;//设置边界的宽度
self.containView.layer.borderColor = [UIColor redColor].CGColor;//边界颜色

这样,运行后的效果

四 添加SubLayer

    CALayer *subLayer1 = [CALayer layer];
subLayer1.frame = CGRectMake(, , , );
subLayer1.backgroundColor = [UIColor blueColor].CGColor;
subLayer1.anchorPoint = CGPointMake(0.5, 0.5);
subLayer1.position = CGPointMake(, );
[self.containView.layer addSublayer:subLayer1];

效果图如图

有可能添加SubLayer的时候,sublayer的frame范围已经超过了super Layer的frame,那么会怎么样呢?

sublayer1.position = CGPointMake(,CGRectGetMaxY(containView.bounds)-);  

但是很多时候我们并不想subLayer的范围超出super layer 这个时候可以设置这个属性

self.containView.layer.masksToBounds = YES;  

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAN4AAADSCAYAAAAlpX7MAAAKomlDQ1BJQ0MgUHJvZmlsZQAASImVlwdQFFkax193Tw6kgZHMEIcsOUqOQ5AcTQwzMAxhGAYGFbOyqOAaUBEBA8gSFVyVuAZEFNMioJh1QRYVdV0MmFDZBo7h9q7uru5f9VX/6uvX//f16/eqvgaAcpktFKbCMgCkCbJEoT7ujOiYWAZ+CEAAAURAAkw2J1PoFhwcAFDNXv+uD7fR0ahumkx5/fv9/ypZbkImBwAoGOV4biYnDeVTaBznCEVZACBcNK+9PEs4xVtQlhehBaJcNsW8GT4+xfEz3DU9JjzUA+W7ABAobLaIBwD5dzTPyObwUB8KBmUzAZcvQNkKZWdOEhudh4LeA8ZpaelTfBhl/fh/8uH9zTNe4slm8yQ88y7TInjyM4Wp7JX/53L8b6Wlimfn0EKDkiTyDZ2aD12zmpR0fwkL4hcGzTKfO1PTFCeJfSNmmZPpETvLXLan/yyLUyLcZpktmnuWn8UKn2VReqjEX5C6MEDin8CScEKmV9gsJ/K9WbOckxQeNcvZ/MiFs5yZEuY/N8ZDkheJQyU1J4q8Je+YljlXG4c9N1dWUrjvXA3Rknq4CZ5ekrwgQjJemOUu8RSmBs/Vn+ojyWdmh0mezUI32Cwns/2C53yCJesD+CAQsAEnK2HF1L4CHunClSI+LymL4YaekgQGS8AxNWZYmJnbAjB15mY+6Tv69FmC6FfnchkdANjno0neXI6tDUDbUwBoH+Zy2m/R7bATgDO9HLEoeyY3tdUBFj3H0kAeKAF1oA30gQmwADbAEbgCL+AHgkA4iAFLAQckgTQgAsvBarAB5IECsBPsBSXgEDgCasAxcAK0gNPgPLgEroFeMAAegEEwAl6CMfABTEAQhIeoEA1SgjQgXcgIsoDsIGfICwqAQqEYKA7iQQJIDK2GNkEFUCFUApVDtdDPUBt0HroC9UH3oCFoFHoLfYERmALLw2qwHjwftoPdYH84HF4C8+AMOAfOhbfDxXAFfBRuhs/D1+ABeBB+CY8jACEjdEQTMUHsEA8kCIlFEhERshbJR4qQCqQBaUe6kZvIIPIK+YzBYWgYBsYE44jxxURgOJgMzFrMNkwJpgbTjOnC3MQMYcYw37FUrCrWCOuAZWGjsTzscmwetghbhW3CXsQOYEewH3A4HB3HxNnifHExuGTcKtw23AFcI64D14cbxo3j8XglvBHeCR+EZ+Oz8Hn4/fij+HP4fvwI/hOBTNAgWBC8CbEEAWEjoYhQRzhL6Cc8I0wQZYi6RAdiEJFLXEncQawkthNvEEeIEyRZEpPkRAonJZM2kIpJDaSLpIekd2QyWYtsTw4h88nrycXk4+TL5CHyZ4ocxZDiQVlMEVO2U6opHZR7lHdUKlWP6kqNpWZRt1NrqReoj6mfpGhSplIsKa7UOqlSqWapfqnX0kRpXWk36aXSOdJF0ielb0i/kiHK6Ml4yLBl1sqUyrTJ3JEZl6XJmssGyabJbpOtk70i+1wOL6cn5yXHlcuVOyJ3QW6YhtC0aR40Dm0TrZJ2kTYij5NnyrPkk+UL5I/J98iPKcgpWClEKqxQKFU4ozBIR+h6dBY9lb6DfoJ+m/5lnto8t3kJ87bOa5jXP++jooqiq2KCYr5io+KA4hclhpKXUorSLqUWpUfKGGVD5RDl5coHlS8qv1KRV3FU4ajkq5xQua8KqxqqhqquUj2iel11XE1dzUdNqLZf7YLaK3W6uqt6svoe9bPqoxo0DWcNvsYejXMaLxgKDDdGKqOY0cUY01TV9NUUa5Zr9mhOaDG1IrQ2ajVqPdImadtpJ2rv0e7UHtPR0AnUWa1Tr3Nfl6hrp5uku0+3W/ejHlMvSm+zXovec6Yik8XMYdYzH+pT9V30M/Qr9G8Z4AzsDFIMDhj0GsKG1oZJhqWGN4xgIxsjvtEBoz5jrLG9scC4wviOCcXEzSTbpN5kyJRuGmC60bTF9PV8nfmx83fN757/3czaLNWs0uyBuZy5n/lG83bztxaGFhyLUotbllRLb8t1lq2Wb6yMrBKsDlrdtaZZB1pvtu60/mZjayOyabAZtdWxjbMts71jJ28XbLfN7rI91t7dfp39afvPDjYOWQ4nHP50NHFMcaxzfL6AuSBhQeWCYSctJ7ZTudOgM8M5zvmw86CLpgvbpcLliau2K9e1yvWZm4FbsttRt9fuZu4i9yb3jx4OHms8OjwRTx/PfM8eLzmvCK8Sr8feWt4873rvMR9rn1U+Hb5YX3/fXb53WGosDquWNeZn67fGr8uf4h/mX+L/JMAwQBTQHggH+gXuDny4UHehYGFLEAhiBe0OehTMDM4I/iUEFxIcUhryNNQ8dHVodxgtbFlYXdiHcPfwHeEPIvQjxBGdkdKRiyNrIz9GeUYVRg1Gz49eE30tRjmGH9Mai4+NjK2KHV/ktWjvopHF1ovzFt9ewlyyYsmVpcpLU5eeWSa9jL3sZBw2LiquLu4rO4hdwR6PZ8WXxY9xPDj7OC+5rtw93NEEp4TChGeJTomFic95TrzdvNEkl6SipFd8D34J/02yb/Kh5I8pQSnVKZOpUamNaYS0uLQ2gZwgRdCVrp6+Ir1PaCTMEw5mOGTszRgT+YuqMqHMJZmtWfJoc3NdrC/+QTyU7Zxdmv1peeTykytkVwhWXF9puHLrymc53jk/rcKs4qzqXK25esPqoTVua8rXQmvj13au016Xu25kvc/6mg2kDSkbft1otrFw4/tNUZvac9Vy1+cO/+DzQ32eVJ4o785mx82HtmC28Lf0bLXcun/r93xu/tUCs4Kigq/bONuu/mj+Y/GPk9sTt/fssNlxcCdup2Dn7V0uu2oKZQtzCod3B+5u3sPYk7/n/d5le68UWRUd2kfaJ943WBxQ3LpfZ//O/V9LkkoGSt1LG8tUy7aWfTzAPdB/0PVgwyG1QwWHvhzmH75b7lPeXKFXUXQEdyT7yNPKyMrun+x+qq1Sriqo+lYtqB6sCa3pqrWtra1TrdtRD9eL60ePLj7ae8zzWGuDSUN5I72x4Dg4Lj7+4ue4n2+f8D/RedLuZMMp3VNlTbSm/GaoeWXzWEtSy2BrTGtfm19bZ7tje9Mvpr9Un9Y8XXpG4cyOs6SzuWcnz+WcG+8Qdrw6zzs/3Lms88GF6Au3ukK6ei76X7x8yfvShW637nOXnS6fvuJwpe2q3dWWazbXmq9bX2/61frXph6bnuYbtjdae+172/sW9J3td+k/f9Pz5qVbrFvXBhYO9N2OuH33zuI7g3e5d5/fS7335n72/YkH6x9iH+Y/knlU9Fj1ccVvBr81DtoMnhnyHLr+JOzJg2HO8MvfM3//OpL7lPq06JnGs9rnFs9Pj3qP9r5Y9GLkpfDlxKu8P2T/KHut//rUn65/Xh+LHht5I3oz+XbbO6V31e+t3neOB48//pD2YeJj/ielTzWf7T53f4n68mxi+Vf81+JvBt/av/t/fziZNjkpZIvY060AggacmAjA22oAqDFo79ALAElqpieeFjTTx08T+E880zdPywaAalcAItYDEID2KAfR0EWZgl6nWqJwVwBbWkriH8pMtLSY8aKgnSX20+TkOzUA8O0AfBNNTk4cmJz8VokWew+AjoyZXnxKOPQP5TBliq4w1cG/6i/uhwDXZxbkHQAAAZ1pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MjIyPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjIxMDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgor0jjuAAAMTklEQVR4Ae3cb2xW5RnH8auVgtW1XWkHXbEqbkFYZ80CDDSWoQnM+WJkW5DoKw2iLluy6MyGc8M/W9UlEpb9H00XX5lIM517NWmCuC6bDZho1VAbM2dZGSi1o1WLVtqd6zx7HoiZuW7OuS/on+95AYXr3Nd9n0/74znPec6hbDLZhA0BBM6oQPkZnY3JEEAgFZjj5TB+9G15f98+ObF3r1Ts65GKAwdkzptvStnEhNeU9EXAFJgsL5cPFyyQ8WWfk/GVX5SyNWtl7oqVcu7C+ebYmDuUxTzVnDj+gbz71FMy98GfyLze3pjrpBcCrgLvt7TIe9/7oZy/4asy9xPzXOfS5lGCN3liQkY7OqT6tltLCx5dtEgOJwcztGSJjDQ1yXt1dTJeWSmS/IvDhsBZE0jOuCrGxuS8oSGpPnhQ6vr7pSF5kagaHCwt6e1ftUvV5pulYt45pb+L/UXu4I290CtzvvJlqTh8OF3bP9euldevuUaOLl0ae630Q8BNoL6vTxbv2SMXJ2+NdBtvaJB3nnxaale3pH+O/Uuu4I3sbC+9yg2uWiWvbNwoxy68MPYa6YfAGROoGRiQ5s5OWdTTk8559Bc7pf7bW6LPnzl4I1vvluqfPpwu6PktW+Qf69ZFXxwNEThbApd0dcny9vZ0+qE7t0rd9oeiLiVT8IqhG6utlefuuIPTyqjfEppNFQE9/Vy9Y4dUDg/L0J13J+F7MNrSTjt4xdNLDV33PfdwahntW0GjqSigp56tbW1p+I78bKcs/E6c087TCp5eSKn8wuWpzzMPPMAr3VT8SWFN0QX0le/qbdvSvkeefUEWrilkIM9Ewdf29SMDvXqpm76n46plHnbGTicB/VnXn3nd5m+6VsbePZF7+cHB08/p9CMDvXrJhZTc7jSYZgL6M68/+5qB/+z8fe7VB51q6h0p5ZWFT/N3P/II7+tys9NgOgro+731d92VLn3kreNSXZ/9DpegVzy9DUw3/XCcz+lSCn6ZhQL6s68Z0G30yT+lv2f9JSh4eu+lbnpHChsCs1mgmIH5P/9xLgYzePqUgd7wrPdeckEllzWDZ4CAZkCzUPnyS3KkfyjzEZnB00d7dNMbntkQQOBkFj7Y/3xmDjN4+jydbvqUARsCCJzMQsVzz2TmMIOnD7Hqpo/2sCGAwMksnP9iIRtZTOzgJU+O66bP07EhgMDJLJzbX8hGFhMzePrfNeiWPsSaZQbGIDDDBIpZKGYjy+GZwSv9Hyk8OZ7FlzEzUeB/WShlI8MxmsHL0JMhCCBgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCBA8A4gyAh4CBM9DlZ4IGAIEzwCijICHAMHzUKUnAoYAwTOAKCPgIUDwPFTpiYAhQPAMIMoIeAgQPA9VeiJgCMwx6qXy9ddvLH09lb7YtatzKi2HtSAQJMArXhATOyEQV4DgxfWkGwJBAgQviImdEIgrQPDietINgSABghfExE4IxBUgeHE96YZAkADBC2JiJwTiChC8uJ50QyBIgOAFMbETAnEFCF5cT7ohECRA8IKY2AmBuAIEL64n3RAIEiB4QUzshEBcAYIX15NuCAQJELwgJnZCIK4AwYvrSTcEggQIXhATOyEQV4DgxfWkGwJBAgQviImdEIgrQPDietINgSABghfExE4IxBUgeHE96YZAkADBC2JiJwTiChC8uJ50QyBIgOAFMbETAnEFCF5cT7ohECRA8IKY2AmBuAIEL64n3RAIEiB4QUzshEBcATN4E+XnpDOWy0TcmemGwHQVmChkYbLcjM/HHqE5crSqMR1cLSMf24QCArNJoGJsLD3cDxcsyHzYZvCONrakzZvkYOZJGIjATBI4b2goPZzjS5ZlPiw7eEuuTJs3yyuZJ2EgAjNJoPpg4UXonZZVmQ/LDN7Yita0+RXy98yTMBCBmSRQ19+fHs7xlWszH5YZvNovFU4118vuzJMwEIGZJNDQ25seTsXylZkPywze5a018u8LVshS6ZOr5K+ZJ2IgAjNBoL6vT6oGB2Xs85fJBc3zMx+SGTzt/OqN96cTbJaOzBMxEIGZILB4z570MA7f/qNchxMUvMVb1qWT3CSPymXyUq4JGYzAdBWoGRiQi/fuTZdf9bUNuQ4jKHgXfbZC/vLNx9KJ7pP7ck3IYASmq0BzZ2e69Dcebpf6xrm5DiMoeDrDsns3ybGaJvm6PCG3ye9yTcpgBKabwCVdXbKop0fGGxrkk7fenHv5wcH71MJy6d3elU74W7mdCy256WkwXQT0gsry9vZ0uQMdT0tNbeE2yjzrDw6eTtK6+dLSKefjson3e3nkGTstBPR93eodO9K16inmZ64rfLyWd/GnFTydbM2vb5CeDW3SKIfkz3Itr3x5vwOMn7IC+krX2tYmlcPDcuhbW+Wi798Sba2nHTydedUff1AKX7e08p4v2reDRlNFQN/TXb1tWyl0jb98KOrSMgVPV6DhK17p1Pd8f5BvcOoZ9VtDs7MhoKeWV27fXnpPp6eXsUOnx1U2mWx5DrC741Vp+e46qTlWuHH0Ubkp+Zh9c3KPy1V52gaP3bWrcIk3eAA7IvB/BPS0Uj8cL35Op1cv9UJKrPd0H50yd/C04VtHJuTA/Y/Lmt/cWOrfl9xktlvWJ7dWX5E819CcPFTUlDzRV508Tpv5RbbU+9QvCN6pGnxtCiQPserzdPpojz5loDc8672XehtYcdNXOf3IIMbVy2LPj/4eJXjFpm+8Ni6vt3fJpY/dK5/+1/7iX/M7AlNeQO+91NvA9I6UvB+Ohxxs1OCdOuGL3cdk+NleqdzfLfX9f5P6Q8m/KqOHpHzixKm78TUCZ1RA/7sGfXJcH2LV5+n00R59yiDPDc9ZDsAteFkWwxgEZotA3Ddcs0WN40QgpwDBywnIcASyCBC8LGqMQSCnAMHLCchwBLIIELwsaoxBIKcAwcsJyHAEsggQvCxqjEEgp8B/AXt9ED5L2bV/AAAAAElFTkSuQmCC" alt="" />

这里再添加两个常用的CALayer 的子类UIShapeLayer 和 UITextLayer的示例

CAShapeLayer *shapeLayer = [CAShapeLayer layer];
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, nil, , );
CGPathAddLineToPoint(path, nil, , CGRectGetHeight(_containView.frame)/);
shapeLayer.path = path;
shapeLayer.bounds = CGRectMake(,,5.0,CGRectGetHeight(_containView.bounds)/);
shapeLayer.anchorPoint = CGPointMake(0.5, 0.5);
shapeLayer.position = CGPointMake(CGRectGetMidX(_containView.bounds),CGRectGetMidY(_containView.bounds));
shapeLayer.lineWidth = 5.0;
shapeLayer.lineCap = kCALineCapRound;
shapeLayer.strokeColor = [UIColor yellowColor].CGColor;
[self.containView.layer addSublayer:shapeLayer]; CATextLayer * textLayer = [CATextLayer layer];
NSString * text = @"blog.csdn.net/hello_hwc";
NSAttributedString * attributeString = [[NSAttributedString alloc] initWithString:text];
textLayer.string = text;
textLayer.alignmentMode = @"center";
textLayer.fontSize = ;
textLayer.foregroundColor = [UIColor brownColor].CGColor;
CGRect bounds;
bounds.origin = CGPointMake(, );
bounds.size = attributeString.size;
textLayer.bounds = bounds;
textLayer.position = CGPointMake(,);
[_containView.layer addSublayer:textLayer];

效果图如下

五 anchorPoint和position

和UIView不同,Layer主要由三个属性来设置位置(极少用Frame):
bounds -  设置大小
anchorPoint -设置锚点(锚点对后续的layer动画有很大影响)
position -  锚点在superLayer中的位置
这样说有点抽象,我们看看以下的图就了解了

对于iOS来说,坐标系如图,archPoint(x,y)的两个值通常取0.0-1.0,默认值是(0.5,0.5)这里的值可以看作所占用x的比例,比如默认的0.5,0.5就是在x的中间和y的中间。

而position则是AnchorPoint在super layer中的位置
如下图

六 layer 显示图片

CALayer * imageLayer = [CALayer layer];
imageLayer.bounds = CGRectMake(,,,);
imageLayer.position = CGPointMake(,);
imageLayer.contents = (id)[UIImage imageNamed:@"lichen.jpg"].CGImage;
imageLayer.contentsGravity = kCAGravityResizeAspect;
[containView.layer addSublayer:imageLayer];

效果图

这里,要详细讲解以下contentGravity这个属性。这个属性决定了contents如何填充。
具体分为两个方面,
方面一,位置方面
具体如图

方面二

iOS CALayer应用详解的更多相关文章

  1. iOS CALayer应用详解(2)

    参考博客:http://blog.csdn.net/hello_hwc?viewmode=list 如果你对CALayer 还没有一个清晰的理解,欢迎看一下前面的博客: http://www.cnbl ...

  2. 转载]IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本 )

    原文地址:IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本作者:佐佐木小次郎 因为最近项目上要用有关LBS的功能.于是我便做一下预研. 一般说来LBS功能一般分为两块:一块是地理 ...

  3. iOS中-Qutarz2D详解及使用

    在iOS中Qutarz2D 详解及使用 (一)初识 介绍 Quartz 2D是二维绘图引擎. 能完成的工作有: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成 ...

  4. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  5. iOS开发——Block详解

    iOS开发--Block详解 1. Block是什么 代码块 匿名函数 闭包--能够读取其他函数内部变量的函数 函数变量 实现基于指针和函数指针 实现回调的机制 Block是一个非常有特色的语法,它可 ...

  6. iOS开发:详解Objective-C runTime

    Objective-C总Runtime的那点事儿(一)消息机制 最近在找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题.当然还有一些其他问题也几乎 ...

  7. iOS应用开发详解

    <iOS应用开发详解> 基本信息 作者: 郭宏志    出版社:电子工业出版社 ISBN:9787121207075 上架时间:2013-6-28 出版日期:2013 年7月 开本:16开 ...

  8. 了解iOS消息推送一文就够:史上最全iOS Push技术详解

    本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表. 1.引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ.微信等IM界面处于前台时,聊天消息和指 ...

  9. iOS开发者证书-详解

    iOS开发者证书-详解/生成/使用 本文假设你已经有一些基本的Xcode开发经验, 并注册了iOS开发者账号. 相关基础 加密算法 现代密码学中, 主要有两种加密算法: 对称密钥加密 和 公开密钥加密 ...

随机推荐

  1. 解决Jquery Kendo.xxx is not a function 的方法

    不知道大家遇到过没有,要同时间使用Telerick 和Kendo的时候 这个问题搞了我好多天,其实解决方法很简单,就是在LAYOUT里面先写TELERIK的注册脚本, 再写KENDO的. @(Html ...

  2. C#组件系列———又一款日志组件:Elmah的学习和分享

    前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候 ...

  3. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  4. iOS 触摸事件与UIResponder(内容根据iOS编程编写)

    触摸事件 因为 UIView 是 UIResponder 的子类,所以覆盖以下四个方法就可以处理四种不同的触摸事件: 1.  一根手指或多根手指触摸屏幕 - (void)touchesBegan:(N ...

  5. CSS布局 - 三栏布局

    CSS布局技术可谓是前端技术中最基础的技术,就是因为基础,所以我认为要更加熟练,深入的去掌握,去梳理. 一. 传统 ---> 浮动实现的三栏布局 采用浮动实现的三栏布局有以下特点及注意事项: · ...

  6. LINQ to SQL语句(20)之存储过程

    在我们编写程序中,往往需要一些存储过程,在LINQ to SQL中怎么使用呢?也许比原来的更简单些.下面我们以NORTHWND.MDF数据库中自带的几个存储过程来理解一下. 1.标量返回 在数据库中, ...

  7. 你所不知道的linq(二)

    上一篇说了from in select的本质,具体参见你所不知道的linq.本篇说下from...in... from... in... select 首先上一段代码,猜猜结果是什么? class P ...

  8. css水平居中的各种方法

    说到水平居中,大家可能觉得很简单啊,text-align:center 就OK了. 但是,有时候会发现这样写了也没出效果.原因是什么呢?  请往下看. 水平居中:分为块级元素居中和行元素居中 行内元素 ...

  9. JavaWeb_day08_EL JSTL

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day08 EL JSTL EL表达式 语法:${} ...

  10. MVC Request.IsAuthenticated一直false Request.Cookie获取不到cookie

    项目中,在做登录验证时,用到了cookie,同一账户登陆,可以.切换其他账号时,就在也登录不上了,用原来的也不行.检查Request.IsAuthenticated一直false,而且Request. ...