2014-02-17 26 views
0

我有一个UIView作为子视图添加到其父视图中。当用户点击这个UIView,我希望它被转换,因此它需要整个屏幕。iOS - 核心动画 - 如何在变换属性更改时设置原点

我试图通过更改它的transform属性来实现,我能够使其大小匹配其父视图,但不能使其位置。

我看了Apple的文档,发现frame不能用于transform。我如何使自己的位置与其父视图一致?

此外,在不使用transform的情况下,通过更改其约束条件(例如NSLayoutAttributeHeight)来达到此目的是个好主意?

+0

你试过view.centre吗?或尝试应用具有平移和旋转的仿射变换。 – santhu

+0

是的,但它似乎没有工作。我所做的是:在更改'transform'属性后,我试图将'center'分配给它的父视图的'center'。 – bohanl

+0

我刚才提到的UIView实际上是一个'UIScrollView',但在这种情况下它并不重要 – bohanl

回答

1

我觉得你变换像这个规模后,你可以简单地改变帧:

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

更新: 如果规模前

//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); 

或更改锚点你在你的UIView中使用Autolayout,解决方案可能取决于你如何设置你的约束。例如,如果你设置你的图像约束是这样的:

enter image description here

我建议仍在使用的尺度变换,但改变顶部和左侧约束为0

,或者你设置你的形象约束这样的:

enter image description here

我会改变中心对齐x和y到超级视图的中心点

也许你可以让我知道你如何设置y ou约束,我可以在我的本地做一些测试。

+0

警告:如果此属性不是标识转换,则frame属性的值未定义,因此应予以忽略。 – bohanl

+0

另外,我可以通过设置其'frame'而不使用'transform'来做到这一点。即使忽略了Apple的说法,使用'transform'然后再使用'frame'有什么意义? – bohanl

+0

@bohanl我添加了另一种可能的解决方案,也许尝试将锚点更改为中心?如果这只是您所描述的简单操作,我会简单地使用框架更改。也许让我知道你的担忧,我可以更新我的答案。 –