关于view的变换

本文深入探讨了iOS系统中UIView和CALayer的基本概念,特别关注于旋转和缩放操作背后的锚点(anchorPoint)机制。通过实例解析,展示了如何利用CALayer的anchorPoint属性来精确控制视图在屏幕上的位置和旋转中心,同时提供了关于视图放大缩小的实用链接,旨在帮助开发者更好地理解和应用这些核心动画技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

绕某点旋转:不得不知layer.anchor

wzyfly的博客摘录一点:“UIView是iOS系统中界面元素的基础,所有的界面元素都是继承自它。它本身完全是由CoreAnimation来实现的。它真正的绘图部分,是由一个CALayer类来管理。UIView本身更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame,bounds等,实际上内部都是在访问它所包含的CALayer的相关属性。”

CAlayer有个重要的属性与旋转view有关,那就是anchor,锚。CALayer.h里定义是:
/* Defines the anchor point of the layer's bounds rect, as a point in
 * normalized layer coordinates - '(0, 0)' is the bottom left corner of
 * the bounds rect, '(1, 1)' is the top right corner. Defaults to
 * '(0.5, 0.5)', i.e. the center of the bounds rect. Animatable. */

anchorPoint服从Uikit坐标系,x轴水平向右,y轴垂直向下,也就是说,view的左上角anchor为(0,0),右下角为(1,1),默认为(0.5,0.5)在view的中心,若要设置某view以左上角为圆心旋转,需要设置

view.layer.anchorPoint = CGPointMake(0,0);
不过通过测试,我们知道上一句仅仅是更改了view的frame.origin的值,可以理解为,原来的anchorPoint在view的中间,现在anchorPoint指定点从中间改为view的左上角了不过是anchorPoint的位置没变,还在原来那个view的中间,因此,为了服从这点,view的frame就必须跟着变了。嗯,应该有人能理解我的意思吧。(  anchorPoint改变前后都指向oldView的中心点的位置

因此,为了view不移位,我们可以重置下frame就行了,当然也可以更改view.layer.position的位置,不过那个要麻烦点,所以现在就暂时用frame吧。

CGRect oldRect = _sliderA.frame;
//改写layer.anchorPoint
_sliderA.frame = oldRect;

view的放大缩小: 看看下面这个链接就好吧

iOS坑:UIView的frame和transfrom






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值