我有UIView
名为container
,我想使用仿射变换来移动(偏移)。此视图包含UIImageView
,是UICollectionViewCell
的子视图。
所以应该很简单:
container.transform = CGAffineTransformMakeTranslation(100, 200) //render container 100 points right and 200 points down
而非常难,因为该代码不会执行任何。该视图在同一个地方激动地呈现,就像我删除该行一样。所以我添加了' print'验证设置的仿射翻译:
container.transform = CGAffineTransformMakeTranslation(100, 200)
print(container.transform) //prints: CGAffineTransform(a: 1.0, b: 0.0, c: 0.0, d: 1.0, tx: 100.0, ty: 200.0)
那似乎没事。因此,我尝试使用container
转换CGAffineTransformMakeRotation
视图,并根据documentation旋转视图,而不是围绕其中心旋转。我尝试了不同的平移,旋转和缩放变换组合,只是为了发现仿射变换矩阵设置正常,但属性tx
和ty
似乎被忽略了a, b, c
和{{1似乎使用不同的锚点然后使用视图的中心(不能说那个点是什么)。
关于可能导致此问题以及如何解决问题的任何想法?
答案 0 :(得分:0)
必须有像汽车布局这样的东西搞砸了。在没有外部影响的情况下,将视图的仿射变换设置为CGAffineTransformMakeTranslation(100,200)将使其向右移动100点并向下移动200.我通过在Xcode中创建新的单视图项目并更改ViewController中的viewDidLoad方法来验证这一点。快速上课:
override func viewDidLoad()
{
super.viewDidLoad()
view.backgroundColor = UIColor.blueColor();
let container = UIView(frame: CGRectMake(0,0,100,100));
container.backgroundColor = UIColor.greenColor();
container.transform = CGAffineTransformMakeTranslation(100, 200);
view.addSubview(container);
}
正如预期的那样,绿色容器视图显示在右侧100点,向下200点,即使其框架为(0,0,100,100)。
因此,请检查自动布局和其他可能影响此视图位置的事情,如果找不到任何内容,请发布更多代码。此外,如果您的容器视图没有背景颜色,请给它一个,以便您可以直接看到它的位置,而不是通过查看图像视图来推断它的位置。
n.b。设置视图的变换实际上并不会移动视图本身,而只是改变它绘制内容的方式/位置。