【问题标题】:Animate UIView frame change without move animation (i.e. cross dissolve between locations)动画 UIView 帧更改而不移动动画(即位置之间的交叉溶解)
【发布时间】:2015-03-03 01:53:23
【问题描述】:

我有四个UIViews,位于我全视图的四个侧面,例如

        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 值以及移动框架,我希望有一个更简单的解决方案。

标签: ios objective-c cocoa-touch animation uiview


【解决方案1】:

您可以为alpha = 0 设置动画,更新完成块中的帧,然后为alpha = 1 设置动画。将每个动画块的持续时间设为通常的 1/2,这样它们一起将花费与旋转事件相同的时间。

如果您想同时溶解然后复制所有视图,设置它们的alpha = 0,更新它们的帧,然后为两个组的 alpha 设置动画:
old views'.alpha = 0
new views'.alpha = 1

第三种解决方案 - 将所有视图分组到一个子视图中,复制整个层次结构,然后使用 options:UIViewAnimationOptionTransitionCrossDissolve 为它们之间的过渡设置动画

【讨论】:

    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多