【问题标题】:Animate UIImageView appearing on screen line by line动画 UIImageView 逐行出现在屏幕上
【发布时间】:2020-07-19 16:15:35
【问题描述】:

我想显示带有一些动画的UIImageView,我想我想让它逐个像素地出现在屏幕上,从左到右逐行移动。有点像打印机会打印图像。 我不知道从哪里开始。

我在想也许可以用另一个可以使用动画变得透明的视图覆盖UIImageView,但是我怎样才能实现呢?

【问题讨论】:

  • 能否分享一个尽可能接近的示例动画?如果您之前尝试过,请分享您的代码
  • 当你说一行一行的时候,你的意思是说,例如,一个 100x100 的正方形从 10x100 或 100x10 的 10 行的方向进来?
  • 实际上,我认为我的意思是逐像素而不是逐行。 100x100 会出现在 10x10 的方格中,从左上角开始绘制第一行 10x10 方格,然后移动到第二行。
  • 想想打印机如何打印图像。
  • 我想我可以覆盖 100 个小的 UIViews 然后一次删除它们 1 个。不过似乎有点矫枉过正。

标签: ios swift uiview uiimageview core-animation


【解决方案1】:

一个想法是,我们在您的图像之上有一个视图,将其完全覆盖。让我们将此视图称为 V。将该视图向下移动 1 个点,从而曝光图像的一行。然后在您的图像顶部有另一个视图,再次完全覆盖它。让我们将此视图称为 H。然后将该视图向右移动 1 个点。现在您的图像的一个“像素”(或者更确切地说,一个 1x1 点网格)被曝光。

我们将动画 H 向右。当它到达终点时,我们将它放回起点,将 V 和 H 下移 1 点,然后重复该过程。

这里有一些东西可以帮助您入门。

extension UIView {

    /**
     - Parameter seconds: the time for one line to reveal
     */
    func scanReveal(seconds: Double) {

        let colour = self.superview?.backgroundColor ?? UIColor.black

        let v = UIView(frame: self.bounds)
        v.backgroundColor = colour
        self.addSubview(v)

        let h = UIView(frame: self.bounds)
        h.backgroundColor = colour
        self.addSubview(h)

        v.frame.origin.y += 1

        // Animate h to the end.
        // When it reaches the end, bring it back, move v and h down by 1 and repeat.

        func move() {
            UIView.animate(withDuration: seconds, animations: {
                h.frame.origin.x = h.bounds.height
            }) { _ in
                h.frame.origin.x = 0
                h.frame.origin.y += 1
                v.frame.origin.y += 1

                if v.frame.origin.y > self.bounds.height {
                    return
                }
                move()
            }
        }
        move()
    }
}

【讨论】:

  • 听起来可以。比我开始玩的分割图像要好得多。
猜你喜欢
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
  • 1970-01-01
相关资源
最近更新 更多