【问题标题】:Swift 4 in Xcode 9 - How to do some animation during dragging UItextviewXcode 9 中的 Swift 4 - 如何在拖动 UItextview 期间做一些动画
【发布时间】:2018-01-15 12:07:14
【问题描述】:

我在UItextview上面的view中做了一个动画,看起来很流畅。我使用了一个计时器来制作这个动画。

但是有一个问题,当我拖动textview时,如果动画没有结束,动画可以暂停。那么,有没有办法让动画在 textview 滚动或被拖动时流畅播放。


好的,我说得尽可能清楚。 我的英语很差,对不起。

一个 UItextview,可以滚动。以及另一个视图上的按钮(此视图与该 UItextview 无关)。这两种观点同时处于一个大视野中。当你触摸按钮时按钮变大,这个过程关注一个动画。但是当textview滚动时,如果它开始并且没有结束,这个动画可以暂停。

当按钮被触摸时调用的函数,这个动画是一个计时器,它在每一帧中的一个数组中的位置。

以及如何详细的暂停动画:

用手指触摸此按钮,即可触发其动画。在这个动画结束之前,用另一个手指拖动textview,我可以发现这个动画很明显是暂停的,当我在textview中抬起手指时它继续。

那么,为什么当文本视图(或滚动视图)滚动时所有动画都会暂停。这是系统程序吗?如何解决这个问题?

如果您还有其他疑问,请在评论区提出问题。

这个动画是这样的:

var TimerCount = 0
var timer = timer()
timer = timer.scheduledTimer(withTimeInterval: 0.02, repeats: true, block: { (timer) in
    /*Some animation code*/
    if TimerCount >= 19 {
        timer.invalidate()
    }
    TimerCount += 1
})

【问题讨论】:

  • 请分享您尝试过的代码以及一些屏幕截图,因为这个问题似乎不清楚
  • 虽然我已经知道问题可能出在哪里,但请给我们一些代码以更好地帮助您。你实际上是如何为这个 UITextView 设置动画的?
  • @GiuseppeLanza 我更新了我的问题,你能帮帮我吗?

标签: ios swift xcode swift4 xcode9


【解决方案1】:

虽然“暂停”问题可以在您的代码中解决,但我必须为记录说明这不是执行动画的正确方法。

我建议您查看 CABasicAnimation 和 CoreAnimation 框架方法,以利用 GPU 正确执行动画。

Ray Wenderlich 一如既往地对这个主题做出了惊人的tutorial

也就是说,发生暂停是因为计时器是使用 schedule 方法安排的。您必须将计时器添加到主运行循环,以避免被用户操作中断。同样,这不是在 iOS 上为屏幕上的某些内容设置动画的正确方法,而且您很可能会遇到性能问题。

var timerCount = 0
let timer = Timer(timeInterval: 0.02, repeats: true) { (timer) in
  /*Some animation code*/
  if TimerCount >= 19 {
    timer.invalidate()
  }
  timerCount += 1
}
RunLoop.main.add(timer, forMode: .commonModes)

虽然此代码为您提供了解决方案,但我强烈建议不要以这种方式执行动画。它有效,最终你会得到你想要的,但将来你可能会遇到问题。

【讨论】:

  • 感谢您的回答,因为 CABasicAnimation 是有限的,所以我使用计时器来执行动画。它只用于位置、帧、比例、颜色等。但它不能改变动画中的字体大小、字距等。所以我认为计时器没有限制,这是自定义动画的最佳方式。那么你对自定义动画有什么想法吗?再次感谢。
  • 嘿,通过一些代码,您几乎可以制作任何东西。如果您不想编写额外的代码,则可以使用动画属性来实现您的目的。例如,对于字体大小,您可以为标签的变换设置动画。您想要达到的结果有很多不同,但这将是另一个问题。最好不要在这里跑题。
  • 但是字体大小,甚至属性文本都没有动画属性,但是计时器是自定义这些动画的最常用方法。无论我想表演什么动画,它总是表现得更早,更漂亮。因为我之前可以控制每一帧的值。就是这样,非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多