在自定义视图中制作 2 个动画

Posted

技术标签:

【中文标题】在自定义视图中制作 2 个动画【英文标题】:Make 2 animations in Custom View 【发布时间】:2013-10-08 13:11:57 【问题描述】:

我正在创建一个自定义视图,它包含 Refresh、*LayoutSubviews* 等方法,遵循 tutorial

我想要一个标签动画增长,它的全宽,然后回到 0 宽度。我在“刷新”方法中使用此代码:

[UIView animateWithDuration:1.3 animations:^
        CGRect frame = CGRectMake(50, 15, 140, 20);
        [labelFav setFrame:frame];
     completion:^(BOOL finished) 
        //[labelFav setHidden:YES];
        [UIView animateWithDuration:1.3 animations:^
            CGRect frame = CGRectMake(50, 15, 0, 20);
            [labelFav setFrame:frame];
        ];

    ];

该代码适用于任何其他视图,但由于由于某种原因这是自定义视图,因此完成块未执行。 发生的事情是它只执行第一个块。我在“完成”块中设置了一个断点,它停在那里但动画没有发生。我尝试设置隐藏标签,但仍然没有发生。

有什么想法吗?

【问题讨论】:

你在使用自动布局吗? 【参考方案1】:

从界面生成器主屏幕中删除自动布局。 您的视图可能正在更改其框架,但自动布局(可能)将其强制到其他地方...

【讨论】:

【参考方案2】:

另一种解决问题的方法。 经过测试。

[UIView animateWithDuration:1.3 animations:^

    CGRect frame = CGRectMake(50, 15, 140, 20);
    [labelViewForFav setFrame:frame];

 completion:^(BOOL finished) 

   [UIView animateWithDuration:1.3 animations:^

                CGRect frame = CGRectMake(50, 15, 0, 20);
                [labelViewForFav setFrame:frame];

         completion:^(BOOL finished) 

        ];
];

问题是当您使 UIlabel 宽度小于其当前宽度时。动画没有正确完成。动画不可见只是跳到最后一帧。

解决它把你的标签放在一个视图中,改变这个视图的大小,它就会正常工作。

【讨论】:

是的,我做到了。第一个动画正确发生,是应该在第一个动画完成后立即开始的动画。 我写了一个代码,希望它能正常工作。让我知道结果。 抱歉没有,它和我的代码发生了同样的事情。第一个动画会发生,但应该在第一个动画之后发生的动画不会。尝试在刷新方法的自定义视图中使用它。它适用于任何其他视图,但这必须在自定义视图的刷新方法中发生。谢谢你的尝试。 我认为 shirink 不工作,因为锚点。当您使用 anition 扩展 UIlabel 时,它可以工作。你的第二个动画跳到结论我会为你找到另一种方式 我找到了另一种方式,我的朋友希望它对你没问题?

以上是关于在自定义视图中制作 2 个动画的主要内容,如果未能解决你的问题,请参考以下文章

在自定义绘制的视图中动画大小变化的问题

在自定义视图控制器转换中抑制导航推送动画

在自定义视图中绘制描边形状

动画未在自定义布局中显示

在自定义 UIView 上为 UIButton 设置动画

在自定义容器控制器中旋转后视图未调整大小