iOS,如何用 animateWithDuration 替换简单的 UIView 图形实例?

Posted

技术标签:

【中文标题】iOS,如何用 animateWithDuration 替换简单的 UIView 图形实例?【英文标题】:iOS, How to alternate simple UIView instances of graphics with animateWithDuration? 【发布时间】:2014-03-16 22:37:40 【问题描述】:

我不确定如何继续。我想为轻微的图形变化制作动画。我需要每 2 秒循环一次。

我在 drawrect 方法的一个类中有一些绘图代码。我使用自定义方法 initWithFrame 传入样式参数。

在我的动画 animateWithDuration 块中,我想我可以先 removeFromSuperview 然后 addSubview 不同样式的实例。

我知道这听起来像是错误的方法。

但是,我不知道该怎么做。

谁能给我一些选择/举个例子?

【问题讨论】:

在超级视图中添加和删除不是动画案例。您可以使用 alpha 属性将其淡入/淡出。一旦第一个视图完成淡出,将其从超级视图中删除并添加第二个并开始淡入。 @krafter 你不能用animateWithDuration 为它制作动画,但transitionWithView 可以为添加或删除子视图制作动画,如果你想这样做的话。 如果您只想每 2 秒调用一次 drawRect:,然后使用 scheduledTimerWithTimeInterval::::: 方法创建一个 NSTimer。在视图上的计时器处理程序中调用setNeedsDisplay 【参考方案1】:

关于您是否应该删除并重新添加视图的原始问题,通常您不会这样做(因为这有点低效)。我通常在我的自定义视图中有一个公共属性,(a)视图控制器可以设置;并且 (b) 由 drawRect 方法使用。然后我实现了一个自定义设置器,它不仅保存支持属性的 ivar,而且还调用 setNeedsDisplay(这将触发 drawRect 为你调用)。

您还没有描述视图中发生了什么变化,但让我给您一个随机示例。假设您有一个drawRect,它绘制了一个给定radius 的圆圈。那么我的UIView 子类可能有这个CGFloat 的属性,例如:

@property (nonatomic) CGFloat radius;

然后我可能会实现一个自定义设置器,它不仅会像往常一样更新 ivar,还会触发drawRect 的重新调用:

- (void) setRadius:(CGFloat)newRadius 

    _radius = newRadius;   //note, I set the ivar backing the property; do not try self.radius = ..., because that will call this same method with infinite recursion
    [self setNeedsDisplay];

然后,当我的视图控制器想要更新视图时,它可以简单地执行以下操作:

customView.radius = 27.5;

或者,如果我想每两秒对它的变化进行动画处理,每两秒淡入新位置,我会将此属性的变化包装在 transitionWithView 块中:

[UIView transitionWithView:customView
                  duration:0.3
                   options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^
                    customView.radius = 27.5;
                
                completion:nil];

现在,显然这是一个随机示例,其中此属性是 CGFloat,但您可以使用您的 drawRect 需要反映屏幕的新渲染的任何自定义属性来执行此操作。

【讨论】:

以上是关于iOS,如何用 animateWithDuration 替换简单的 UIView 图形实例?的主要内容,如果未能解决你的问题,请参考以下文章

如何用python实现异步io

iOS,如何用 animateWithDuration 替换简单的 UIView 图形实例?

f如何用fiddler对ios抓包

如何用图像作为背景填充 iOS 堆栈视图(UIStackView)?

Javascript:如何用逗号显示iOs数字键盘

如何用appium测试ios包