动画 UIView 帧更改而不移动动画(即位置之间的交叉溶解)
Posted
技术标签:
【中文标题】动画 UIView 帧更改而不移动动画(即位置之间的交叉溶解)【英文标题】:Animate UIView frame change without move animation (i.e. cross dissolve between locations) 【发布时间】:2015-03-03 01:53:23 【问题描述】:我有四个UIView
s,位于我全视图的四个侧面,例如
View 3
View 4 View 2
View 1
(注意底视图有一点偏移)
它们都是 44x44 像素,看起来完全一样。
我让视图逆时针移动到下一个视图的位置(即视图 1 移动到视图 2,视图 2 移动到视图 3,等等),视图 4 移动到视图 1,但是不偏移。这部分工作正常,代码如下:
[UIView animateWithDuration:0.5 animations:^
[view1 setFrame:view2.frame];
[view2 setFrame:view3.frame];
[view3 setFrame:view4.frame];
[view4 setFrame:centerFrame];
completion:^(BOOL finished)
[self reloadData];
];
centerFrame
是 view1 的框架没有偏移。
在reloadData
方法中,帧被移回原来的位置,并且,因为它们看起来都一样,用户应该看到的唯一的事情是底部视图的移动回到它的偏移位置(虽然它确实从 view4 变为 view1)。这个变化看起来有点突然,我想为它制作动画,但我不希望视图向后移动,只需交叉溶解,这样只有底部视图看起来发生了变化。我试过了:
[UIView transitionWithView:self.view duration:1.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^
// Reset frames
completion:nil];
和
[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^
// Reset frames
completion:nil];
但两者都会移动视图。所以我的问题,
如何使用交叉溶解动画为 UIView
帧更改设置动画,而不是在点之间移动?
提前致谢!
【问题讨论】:
明显的建议,但你试过玩 alpha 吗? @MendyK 这将涉及制作具有相同属性的另一个视图、更改一些视图的 alpha 值以及移动框架,我希望有一个更简单的解决方案。 【参考方案1】:您可以为alpha = 0
设置动画,更新完成块中的帧,然后为alpha = 1
设置动画。将每个动画块的持续时间设为通常的 1/2,这样它们一起将花费与旋转事件相同的时间。
如果您想同时溶解然后复制所有视图,设置它们的alpha = 0
,更新它们的帧,然后为两个组的 alpha 设置动画:
old views'.alpha = 0
new views'.alpha = 1
第三种解决方案 - 将所有视图分组到一个子视图中,复制整个层次结构,然后使用 options:UIViewAnimationOptionTransitionCrossDissolve
为它们之间的过渡设置动画
【讨论】:
以上是关于动画 UIView 帧更改而不移动动画(即位置之间的交叉溶解)的主要内容,如果未能解决你的问题,请参考以下文章