ios至于理解锚
锚点ios出现在少数地方,多数用在动画。
今天看了一部电影,以上所有关于锚,两年前锚这个概念看cocos2d当被接触的基本概念,当时我没怎么看,今天看了,刚刚好学习。
阅读blog,它是关于锚,像:
cocos2d里採用OpenGL ES坐标系。坐标原点在屏幕左下角。
而ios採用的是Quartz 2D坐标系,坐标原点在屏幕左上角。
在cocos2d和ios中分别把视图的坐标点设为(10,10),结果例如以下:
那么什么是锚点呢?以下以一个样例来说明:
比方要创建下面两个视图,蓝色视图左上角在坐标(5,4)处。而橙色视图右边和蓝色视图对齐,有一半的高度处于蓝色视图外面。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamlqdW55dWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
依照ios标准的创建视图的写法能够这样写代码:
- UIView *blueView = [[UIView alloc] initWithFrame:CGRectMake(5, 4, W, H)];
- blueView.backgroundColor = [UIColor blueColor];
- [self.view addSubview:blueView];
- UIView *orangeView = [[UIView alloc] initWithFrame:CGRectMake(W-w, H-h/2, w, h)];
- orangeView.backgroundColor = [UIColor orangeColor];
- [blueView addSubview:orangeView];
能够看到创建视图时就要计算视图左上角的坐标,很麻烦。
而使用了锚点的代码能够这样写:
- UIView *blueView = [[UIView alloc] initWithSize:CGSizeMake(W, H)];
- [blueView setPosition:CGPointMake(5, 4) atAnchorPoint:CGPointMake(0, 0)];
- blueView.backgroundColor = [UIColor blueColor];
- [self.view addSubview:blueView];
- UIView *orangeView = [[UIView alloc] initWithSize:CGSizeMake(w, h)];
- [orangeView setPosition:CGPointMake(W, H) atAnchorPoint:CGPointMake(1, 0.5)];
- orangeView.backgroundColor = [UIColor orangeColor];
- [blueView addSubview:orangeView];
可见,使用锚点省去了苦逼的计算过程。当然了,锚点也是针对子视图去设计的。锚点掌握好了,我们就不用再去计算x,y坐标了。
就拿上面这个样例分析一下吧:
把鸟瞰图蓝色view的左边点(W,H)作为自身的锚点(1,0.5)【注意:锚点是在自身上找,这个点一一映射的有一个父view的坐标,能够通过这两个值来计算子视图的view.frame.origin】.
好好理解上句话,锚点的坐标范围例如以下:
这是在Quartz
2D坐标系中得锚点。
以下看一下代码中把父视图的点作为自身锚点的方法。
- (void)setPosition:(CGPoint)point atAnchorPoint:(CGPoint)anchorPoint
{
CGFloat x = point.x - anchorPoint.x * self.width;
CGFloat y = point.y - anchorPoint.y * self.height;
[self setOrigin:CGPointMake(x, y)];
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
ios至于理解锚的更多相关文章
- iOS --runtime理解
iOS~runtime理解 Runtime是想要做好iOS开发,或者说是真正的深刻的掌握OC这门语言所必需理解的东西.最近在学习Runtime,有自己的一些心得,整理如下,一为 查阅方便二为 或许能给 ...
- ios开发理解nil,Nil, NULL
nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空.这些可以理解为nil,Nil, NULL的区别吧. iOS剪切板 UIPasteboard *pasteboard = [ ...
- [iOS]深入理解GCD
看到一篇很好的文章,本来想翻译的,但发现已经有人翻译了,遂简单整理了一下,方便阅读学习 新博客[wossoneri.com] 什么是GCD GCD(Grand Central Dispatch)是li ...
- iOS Runloop理解
一.RunLoop的定义 当有持续的异步任务需求时,我们会创建一个独立的生命周期可控的线程.RunLoop就是控制线程生命周期并接收事件进行处理的机制. RunLoop是iOS事件响应与任务处理最核心 ...
- iOS - 详细理解KVC与KVO
详细理解KVC与KVO 在面试的时候,KVC与KVO有些时候还是会问到的,并且他们都是Objective C的关键概念,在这里我们先做一个简单地介绍: (一)KVC: KVC即指:NSKeyValue ...
- 【读书笔记】iOS网络-理解错误源
考虑一个字节是如何从设备发往运程服务器以及如何从远程服务器将这个字节接收到设备,这个过程只需要几百毫秒时间,不过确要求网络设备都能正常工作才行.设备网络和网络互联的复杂性导致了分层网络的产生.分层网络 ...
- iOS 深入理解RunLoop
RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何利 ...
- iOS工程结构理解
iOS开发中关于工程结构有三个关键部分,分别是:Targets,projects 和 workspaces. Targets指定了工程或者库文件如何编译,包括building setting,comp ...
- iOS runLoop 理解
目录 概述 run loop modes 一.概述 run loop叫事件处理循环,就是循环地接受各种各样的事件.run loop是oc用来管理线程里异步事件的工具.一个线程通过run loop可以监 ...
随机推荐
- 新一代自平衡电动代步工具Solo wheel!
http://m.baidu.com/from=844b/bd_page_type=1/ssid=0/uid=3151E6C0905477A13653132D762BB6FB/pu=sz%401320 ...
- Linux档案种类与扩展名(2013.09.03)
档案种类: 正规档案(regular file ): 第一个字符为 [ -],例如 [-rwxrwxrwx ].另外,依照档案的内容,又大略可以分为: 纯文本档(ASCII) 二 ...
- Error与Exception的区别
错误和异常的区别(Error vs Exception) 错误和异常的区别(Error vs Exception) 今天面试问了这样一个问题,"Error" 和 "Exc ...
- 该View转换成Bitmap方法
方法一: /** * 该View绘制到Bitmap上 * @param view 须要绘制的View * @param width 该View的宽度 * @param height 该View的高度 ...
- 使用 angular directive 和 json 数据 D3 随着标签 donut chart演示样本
使用angular resource载入中priorityData.json中间json数据,结合D3绘制甜甜圈图.执行index.html其结果见于图.: priorityData.json中jso ...
- intellij idea该插件开发摘要
最近在做一个intellij idea插件,功能是读取表和数据库信息字段和预先定义的模板来生成代码文件(实体,service,springmvc该controller,freemark文件等). 找了 ...
- Learning To Rank之LambdaMART前世今生
1. 前言 我们知道排序在非常多应用场景中属于一个非常核心的模块.最直接的应用就是搜索引擎.当用户提交一个query.搜索引擎会召回非常多文档,然后依据文档与query以及用户的相关程度对 ...
- Very Deep Convolutional Networks for Large-Scale Image Recognition
Very Deep Convolutional Networks for Large-Scale Image Recognition 转载请注明:http://blog.csdn.net/stdcou ...
- 内网port映射具体解释(花生壳)
关于怎样建立服务器的解答. 一.花生壳的作用 首先,我们先来了解一下花生壳的究竟有什么作用.由于ADSL每次拨号上网所获得的IP地址每次都是不同的,花生壳起到的作用就是方便用户訪问我们的server( ...
- Outlook将收到邮件的附件保存在磁盘
1. 新建一个宏 1)文件->选项->自定义功能区, 把主选项卡的 开发工具勾选上. 2)开发工具->宏,输入宏名,创建. 加入以下代码 Public Sub SaveAttach( ...