1
133
这个 Layer Geometry and Transforms 核心动画编程指南的一节解释了Calayer的位置和锚定点属性之间的关系。基本上,层的位置是根据层的锚定点的位置来指定的。默认情况下,层的锚定点为(0.5,0.5),位于层的中心。设置图层位置时,将设置图层中心在其超级图层坐标系中的位置。 因为位置相对于层的锚定点,所以在保持相同位置的同时更改该锚定点会移动层。为了防止这种移动,您需要调整层的位置来考虑新的锚定点。我这样做的一种方法是获取层的边界,将边界的宽度和高度乘以新旧锚定点的标准化值,取两个锚定点的差,并将该差应用于层的位置。
您甚至可以通过使用
|
2
195
我也有同样的问题。布拉德拉森的解决方案工作得很好,即使当视图旋转。这是他的解决方案翻译成代码。
以及Swift等价物:
|
3
43
解决这个问题的关键是使用frame属性,这是唯一一个奇怪的改变。 斯威夫特2
斯威夫特3
然后我调整尺寸,从锚定点开始调整。 然后我必须恢复原来的锚定点; 斯威夫特2
斯威夫特3
编辑:如果视图旋转,则此值将变为薄片状,因为如果应用了CGaffinetTransform,则未定义“帧”属性。 |
4
26
对于我来说,当我开始将其与我对框架的理解进行比较时,理解
在layer
|
5
15
有这么简单的解决办法。这是基于肯尼的回答。但是不要应用旧框架,而是使用它的原点和新的原点来计算过渡,然后将该过渡应用到中心。它也适用于旋转视图!这是代码,比其他解决方案简单得多:
以及Swift版本:
|
6
9
对于那些需要它的人,这里是马格努斯在斯威夫特的解决方案:
|
7
5
在故事板上编辑并查看uiview的定位点(swift 3)这是一个备用解决方案,允许您通过属性检查器更改定位点,并具有另一个属性来查看定位点以进行确认。
创建要包含在项目中的新文件导入uikit @可设计的 类uiViewAnchorPoint:uiView{ @IBinspectable var showanchorpoint:bool=false @IBinspectable var anchorpoint:cgpoint=cgpoint(x:0.5,y:0.5){ DIDSET { 设置锚定点(锚定点:锚定点) } } 覆盖func draw(rect:cgrect){ 如果Showanchorpoint{ 让anchorPointLayer=calayer()。 anchorPointLayer.backgroundcolor=uicolor.red.cgcolor anchorPointLayer.bounds=cgrct(x:0,y:0,width:6,height:6) 锚点层。转弯半径=3 let anchor=层.锚定点 让大小=layer.bounds.size anchorpointlayer.position=cgpoint(x:anchor.x*size.width,y:anchor.y*size.height) 层.添加子层(锚点层) } } func setanchorpoint(anchorpoint:cgpoint){ var newpoint=cgpoint(x:bounds.size.width*锚定点.x,y:bounds.size.height*锚定点.y) var oldpoint=cgpoint(x:bounds.size.width*layer.anchorpoint.x,y:bounds.size.height*layer.anchorpoint.y) newpoint=newpoint.applying(转换) oldpoint=oldpoint.applying(转换) var位置=层位置 位置.x-=oldpoint.x 位置.x+=新点.x 位置.Y-=旧点.Y 位置.Y+=新点.Y layer.position=位置 layer.anchorPoint=锚定点 } }
|
8
5
这里是
user945711's answer
已针对OS X上的nsview进行调整。此外,nsview没有
|
9
4
如果改变锚定点,它的位置也会改变,除非原点是零点。
|
10
2
对于Swift 3:
|
11
0
在马格努斯的伟大和彻底的答案的基础上,我创建了一个适用于子层的版本:
|
Noah H · 如何通过终端或Swift禁用三指轻拍手势? 6 年前 |
Dmitry Serov · 货币数字格式-数字为整数时省略分数部分 6 年前 |
Duny · ObjC日期始终返回2017年12月25日 6 年前 |
Jan Kaiser · NSButton不调用其操作 6 年前 |