- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章iOS CoreAnimation 图层几何学由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
布局 。
在uiview中与位置,尺寸有关的属性有 frame bounds center在此不多赘述,在calayer中同样有与其相对应的属性 frame bounds position 需要注意的是 center与position 虽然字面表达不一样,但是其功能是一致的,为了更加清晰的展示以上内容,我在故事板中创建一个有色uiview. 。
图片一 。
在控制台打印日志
1
2
3
4
5
6
|
customview_frame:{{117, 241}, {140, 185}}
customview_bounds:{{0, 0}, {140, 185}}
customview_center:{187, 333.5}
customview_layer_frame:{{117, 241}, {140, 185}}
customview_layer_bounds:{{0, 0}, {140, 185}}
customview_layer_position:{187, 333.5}
|
根据日志所打印内容可知 uiview与calayer 的布局属性是一一对应的. 。
以上内容了解后我们需要直达frame本质上是一个复合的属性,也就是说他是由bounds position transform计算得到的(transform:放大,旋转等).为了证实这件事,我们将上面的有色view旋转一个角度. 。
图片二 。
在控制台打印日志
1
2
3
|
customview_layer_frame:{{80.128221735089298, 218.39265014993941}, {213.74355652982138, 230.21469970012117}}
customview_layer_bounds:{{0, 0}, {140, 185}}
customview_layer_position:{187, 333.5}
|
通过对比两次打印日志的对比不难发现,当我们将图层旋转后 bounds position 都没有改变,而 frame 却大有改变.那么问题来了,此时的 frame 代表的是什么?我们以customview_layer_frame为 frame 在视图上添加一个新的视图并且将其作为旋转视图的背景. 。
图片三 。
图片三与图片二相比我们可以发现,frame实际上代表了覆盖在图层旋转之后的整个轴对齐的矩形区域. 。
锚点-anchorpoint 。
锚点这个词初识是很陌生的,好比航船的锚用来固定航船,图层中的锚点也具有相同的功能,锚点可以 固定 图层,也就是说锚点是图层的句柄.默认情况下锚点位于图层的中点,我们将图二的的锚点打印. 。
customview_layer_anchorpoint:{0.5, 0.5} 。
我了便于观察,我在已有的 uiview 上面添加一个同样大小位置显色不同的uiview(在橙色视图上面添加一个绿色视图,绿色视图的锚点在绿色视图的中心点). 。
图片四 。
将绿色视图的锚点设置为(0.0). 。
绿色视图的锚点在绿色视图的左上角. 。
图片五 。
再做一次实现,我将绿色视图的锚点设置为(1,1).也就是将锚点设置在绿色视图的右下角. 。
图片六 。
改变锚点可以盖面绿色视图的展示效果,那么此时的 bounds position frame 呢?我在控制台打印锚点为(0.5,0.5)与(1,1)时的数据. 。
1
2
3
4
|
//(0.5,0.5)
customview_layer_frame:{{0, 0}, {140, 185}}
customview_layer_bounds:{{0, 0}, {140, 185}}
customview_layer_position:{70, 92.5}
|
1
2
3
4
|
//(1,1)
customview_layer_frame:{{-70, -92.5}, {140, 185}}
customview_layer_bounds:{{0, 0}, {140, 185}}
customview_layer_position:{70, 92.5}
|
由两个数据对比可得,锚点的改变只会改变 frame. 。
到此锚点的基本概念已经基本了解,那么锚点用在什么地方呢?在这我列举一个简单的用法.现在我将锚点为(0.5,0.5)与(1,1)的绿色视图分别进行旋转(持续). 。
图片七 。
图片八 。
对比两个gif,可以知道视图的旋转是以锚点为中心进行旋转的. 。
坐标系 。
坐标系无非就是(x,y,z),我不对(x,y)进行讲解,着重讲解一下z.在视图坐标系中,z轴与我们在数学中的z轴是有相同的效果的,他表现的是垂直的坐标,如果我们为图层设置z轴坐标该图层将会在未设置z轴坐标或者小于该z轴坐标的图层上方展示.为了着重表现该现象,我在绿色视图中添加一个蓝色图层与红色图层,先看一下代码清单. 。
1
2
3
4
5
6
7
8
|
calayer * bluelayer = [[calayer alloc]init];
bluelayer.frame = self.greenview.layer.frame;
bluelayer.backgroundcolor = [uicolor bluecolor].cgcolor;
calayer * redlayer = [[calayer alloc]init];
redlayer.frame = self.greenview.layer.frame;
redlayer.backgroundcolor = [uicolor redcolor].cgcolor;
[self.greenview.layer addsublayer:bluelayer];
[self.greenview.layer addsublayer:redlayer];
|
由代码可以发现先添加的蓝色图层后添加的红色图层,因此红色图层在最上方. 。
图片九 。
将蓝色的图层的z轴坐标设置为1.0f. 。
图片十 。
hit testing 。
calayer 是不关心响应链事件的,但是它提供了两个方法来处理事件. 。
-containspoint: 接受一个在本图层坐标系下的cgpoint,如果这个点在图层frame范围内就返回yes,否则返回no.为了理解这一性质我写一个小案例,在以后的蓝色图层和白色图层中点击,如果点击蓝色区域控制台打印blue,如果在白色区域控制台打印white. 。
1
2
3
4
5
6
7
8
9
|
- (
void
)touchesbegan:(nsset<uitouch *> *)touches withevent:(uievent *)event {
cgpoint point = [[touches anyobject]locationinview:self.view];
point = [self.bluelayer convertpoint:point fromlayer:self.view.layer];
if
([self.bluelayer containspoint:point]) {
nslog(@
"blue"
);
}
else
{
nslog(@
"white"
);
}
}
|
-hittest: 也是接受一个 cgpoint 但是返回的是 calayer,通过判断返回的图层是否是所要响应的图层然后做出相应的操作,继续上面的案例稍加改动. 。
1
2
3
4
5
6
7
8
9
|
- (
void
)touchesbegan:(nsset<uitouch *> *)touches withevent:(uievent *)event {
cgpoint point = [[touches anyobject]locationinview:self.view];
calayer * layer = [self.view.layer hittest:point];
if
(layer == self.bluelayer) {
nslog(@
"blue"
);
}
else
{
nslog(@
"white"
);
}
}
|
自动布局 。
当使用视图的时候,可以充分利用uiview的uiviewautoresizingmask和nslayoutconstraint进行自动布局,但是如果想要随意控制calayer的布局,就需要通过使用 calayerdelegate .如下函数
- (void)layoutsublayersoflayer:(calayer *)layer,
当图层的bounds发生改变,或者图层的-setneedslayout方法被调用的时候,这个函数就会执行.这时可以手动的对图层进行重新绘制,但是不能像uiview的autoresizingmask和constraints属性做到自适应屏幕旋转.这也是为什么最好使用视图而不是单独的图层来构建应用程序的重要原因之一. 。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我! 。
原文链接:http://www.cnblogs.com/xubaoaichiyu/p/6553859.html 。
最后此篇关于iOS CoreAnimation 图层几何学的文章就讲到这里了,如果你想了解更多关于iOS CoreAnimation 图层几何学的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想填充 3D 等高线图 (contour3(X,Y,Z)),就像 2D 等高线填充图 (contourf(X,Y,Z))。但我无法弄清楚如何实现这一目标。 contour3 和 surf 的组合不是
我有一个 c3.js 折线图,表示 2 个值的演变。我需要折线图的工具提示是饼图(工具提示 = 另一个 c3.js 图形)。 这是我成功的: http://jsfiddle.net/owhxgaqm/
我有具有结构的 Pandas 数据框: A B 0 1 1 1 2 1 2 3 4 3 3 7 4 6 8 如何生成 Seaborn Violin 图,每列作为其自己的单独
我正在使用 D3DXSPRITE 方法将我的 map 图 block 绘制到屏幕上,我刚刚添加了一个缩放功能,当您按住向上箭头时会放大,但注意到您现在可以看到图 block 之间的间隙,这是一些屏幕截
1、系统环境如下图: 2、为该系统添加一块新的虚拟硬盘,添加后需重启虚拟机,否则系统不识别;如下图,/dev/sdc 是新添加的硬盘; 3、fdisk /dev/sdc为新硬盘创建分区:
1、nagios简介 nagios是一款开源的电脑系统和网络监视工具,能有效监控windows、linux和unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发
越来越多人开始习惯用手机上网,浏览网页、查看邮件···移动化已经成为互联网发展必然趋势,包括facebook在内的很多互联网公司都将移动广告作为下一个淘金地
1.图片处理 1.圆角图片 复制代码 代码如下: /** * 转换成圆角 * &n
Microsoft SQL Server Management Studio是SQL SERVER的客户端工具,相信大家都知道。我不知道大伙使用导入数据的情况怎么样,反正我最近是遇到过。主要是因为没
debian6系统: 首先先安装mysql吧: 打开终端(root)用户登入 apt-get purge mysql-server-5.5 安装完成后: 默认情况下Mysql只允许本地登录
fedora16英文环境下支持中文输入法的方法 fedora16英文环境下支持FCITX的中文输入法: $ im-chooser 就会出现选择界面,选择第二个就行了。
Net预编译命令 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe -? 显示说明 我们需要选择的命令为&n
有的时候电脑出现一些故障有的时候通过将其修改bios设置的方法来解决故障,那么在bios上设置能不能将电脑恢复出厂设置呢?其实也是可以的。方法也很简单的,只要会进入电脑的bios懂的上面英文的意思就
笔者曾介绍过Deepin 将对龙芯进行全面支持,打造最优美龙芯电脑桌面。现在Deepin团队移植工作取得了突破性的成果,Deepin桌面已经在龙芯3A和龙芯3B电脑上成功运行起来了。 以下为龙芯3
在安装一些软件之后,我们的电脑总是会发生一点小变化,不是桌面上多了几个网址图标,就是IE浏览器的默认主页被篡改成乱七八糟的网址。最可气的是,在IE设置中将默认主页改回来后,下次启动Win7后又变了回
“注册表编辑器怎么打开”虽说不是很难的问题,但是对于对电脑常识不是很擅长的网民来说,当电脑出现问题或需要更改设置时,着实还是件头疼的问题。因为需要打开注册表进行操作解决。那么如何打开注册表编辑器呢?
这篇文章重点介绍10个重要的WordPress安全插件和技巧,用来保护WordPress网站或者博客。 1. WP Security 人工帮助你修复被黑客入侵的网站,只要按照他们网站上的联系电话
其实运用object和javascript调用外部文件,也能实现不同栏目调用不同友情链接,即相当于调用不同栏目友情链接文件, {dede:field.typeid/}来获取当前栏目的ID。
我有一个复值矩阵。 如果我发出命令: plot(myMatrix) 然后它在图形设备上显示一种散点图,X 轴标记为 Re(myMatrix),Y 轴标记为 Im(myMatrix)。这显示了我正在寻找
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 4年前关闭。 Improve this questi
我是一名优秀的程序员,十分优秀!