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可以监 ...
随机推荐
- PostgreSQL服务端监听设置及client连接方法
背景介绍: PostgreSQL服务端执行在RedHat Linux上,IP为:192.168.230.128 client安装在Windows XP上, IP为:192.168.230.1 配置方法 ...
- SE 2014年5月25日
如图配置 两实验 R1模拟总部,R2 与R3模拟分部 实验一 要求使用 IPSec VPN 主模式,使得总部与两分部内网可相互通讯 步骤: 1. 配置默认路由 [RT1]ip route-stat ...
- cocos2d-x 旅程開始--(实现瓦片地图中的碰撞检測)
转眼隔了一天了,昨天搞了整整一下午加一晚上,楞是没搞定小坦克跟砖头的碰撞检測,带着个问题睡觉甚是难受啊!还好今天弄成功了.只是感觉程序不怎么稳定啊.并且发现自己写的东西让我重写一遍的话我肯定写不出来. ...
- java 解析 json 遍历未知key
1.—————————————————————————————————————————————————————————————— import net.sf.json.JSONObject; Stri ...
- hibernate之关于使用连接表实现多对一关联映射
[Hibernate]之关于使用连接表实现多对一关联映射 在我们项目使用中採用中间表最多的一般就是多对一,或者是多对多,当然一对一使用中间表也是能够的,可是这样的几率通常少之又少!所以这里重点介绍多对 ...
- Windows Phone开发(42):缓动动画
原文:Windows Phone开发(42):缓动动画 前面在讨论关键帧动画的时候,我有意把几个带缓动动画的关键帧动画忽略掉,如EasingColorKeyFrame.EasingDoubleKeyF ...
- text bss data的区别
BSS段 在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS ...
- client对象层次和0级DOM
刚開始学了两天JS,闲着无聊,顺手画了张图
- hdu 1394 Minimum Inversion Number(线段树之 单点更新求逆序数)
Minimum Inversion Number T ...
- WPF Delegate委托整理
那啥,是从这里整理出来的,感谢Rising_Sun,整理的过于简单,看不明白的戳这里 using System; using System.Collections.Generic; using Sys ...