【问题标题】:iOS - Core Animation - How to set origin when transform property is changediOS - 核心动画 - 如何在变换属性更改时设置原点
【发布时间】:2014-03-16 07:21:01
【问题描述】:

我在其父视图中添加了一个UIView 作为子视图。当用户点击这个UIView 时,我希望它被转换成占据整个屏幕。

我正在尝试通过更改其transform 属性来做到这一点,并且我能够使其大小与其父视图匹配,但与其位置不匹配。

我阅读了 Apple 文档,发现 frame 不能与 transform 一起使用。如何使其位置与其父视图对齐?

另外,不使用transform,通过更改其约束来这样做是否是个好主意,例如NSLayoutAttributeHeight

【问题讨论】:

  • 你试过 view.centre 了吗?或者尝试应用具有平移和旋转的仿射变换。
  • 是的,但它似乎不起作用。我所做的是:更改transform 属性后,我尝试将center 分配为与其父视图的center 相同。
  • 我说的UIView实际上是UIScrollView,但在这种情况下并不重要
  • 如果你使用 autolayout ,这个问题可能会发生。尝试不使用自动布局。
  • 您仍然可以使用自动布局。我已经更新了我的答案。请检查一下。

标签: ios iphone uiview core-animation


【解决方案1】:

我认为您可以在通过像这样的变换缩放后简单地更改框架:

//i am using 5 for testing purpose
self.backgroundImageView.transform = CGAffineTransformMakeScale(5, 5);

self.backgroundImageView.frame = CGRectMake(0, 0, self.backgroundImageView.frame.size.width, self.backgroundImageView.frame.size.height);

或者改变刻度前的锚点:

self.backgroundImageView.layer.anchorPoint = CGPointMake(0.5, 0.5);
self.backgroundImageView.transform = CGAffineTransformMakeScale(5, 5);

更新: 如果您在 UIView 中使用 Autolayout,解决方案可能取决于您如何设置约束,例如,如果您像这样设置图像约束:

我建议仍然使用缩放变换,但将顶部和左侧约束更改为 0。

或者你像这样设置你的图像约束:

我会将中心对齐 x 和 y 更改为超级视图的中心点

也许你可以告诉我你是如何设置约束的,我可以在本地为你做一些测试。

【讨论】:

  • 警告:如果此属性不是恒等变换,则 frame 属性的值未定义,因此应忽略。
  • 另外,我可以通过设置它的frame 而不使用transform 来做到这一点。即使忽略Apple所说的,使用transform然后再次使用frame有什么意义?
  • @bohanl 我添加了另一个可能的解决方案,也许尝试将锚点更改为中心?如果这是您描述的简单操作,我将简单地使用框架更改。也许让我知道你的担忧,我可以更新我的答案。
  • 谢谢,我会试试的。另外,在不使用变换的情况下,通过更改其约束(例如 NSLayoutAttributeHeight)来这样做是个好主意吗?
  • 哦,如果您在这种情况下使用自动布局,我建议您不要使用frame 方法。您介意告诉我您是如何设置约束的吗?
猜你喜欢
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多