有没有更好的方法在Swift中进行滚动动画?

时间:2018-02-18 11:22:29

标签: ios swift animation

我尝试在我的应用程序用户界面中添加行为,用户可以向左滑动,这将导致一组UILabels在屏幕左侧同步滚动,但是然后立即再次向右滚动,但从右侧滚动,但包含新信息。

这种效果意味着给人的印象是你从一个"设置"信息到下一个...比如说,在开始比赛之前选择一辆车...但实际上它是相同的视图被重复使用...滚动屏幕以使他们的label.text信息更新..然后又滚回去了。

我刷了所有的照顾。我遇到的问题是我的(工作)解决方案:

UIView.animate(withDuration: 0.2, animations: {
        // move label off to the left
        self.titleLabel.center.x -= self.view.bounds.width
    }, completion: {
        $0 ; print("I'm halfway done!")
        // teleport view to a location off to the right
        self.titleLabel.center.x += 2*(self.view.bounds.width)
        // reset label's data
        self.titleLabel.text = NEW_INFO
        // slide label back on screen from the right
        UIView.animate(withDuration: 0.2, animations: {
            self.titleLabel.center.x -= self.view.bounds.width
        }, completion: nil)
    })

感觉像穿着别人的内衣一样无用。

$ 0的唯一原因是让XCode停止说:

  

"无法转换类型'() - >的值()'预期参数类型'((Bool) - > Void)?'"

而且我确信我在完成程序段中完成动画的第二部分会导致头痛。

有更聪明的方法吗?

PS - 我宁愿不使用任何预先制作的类,例如" ScrollView"或类似的......这些视图都是单独的交互式,并响应其他回调等。

谢谢!

1 个答案:

答案 0 :(得分:1)

更好的方法是使用UIPageViewController

这需要一些学习和设置,但比尝试自己动手更容易。

采用UIPageViewController的方法是这样的......

创建数据模型......使用您的类比......

struct Car {
    let image: UIImage
    let name: String
}

然后创建一个将显示它的UIViewController子类。

class CarViewController: UIViewController {
    var car: Car? {
        didSet {
            displayCar()
        }
    }

    func displayCar() {
        label.text = car?.name
        imageView.image = car?.image
    }
}

然后你创建一个UIPageViewController。在这里你有一系列汽车。然后在函数func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController?中,您可以创建CarViewController并从数组中传入正确的Car

然后,这将完成所有滚动和显示,并且所有内容仍然是交互式的。

有关其工作原理的更多信息,您可以查看this one from Ray Wenderlich等教程。

您也可以使用它来显示页面的一部分(而不是滚动整个屏幕。