动画滚动视图以显示具有不同值的相同内容iOS Swift

时间:2016-05-27 15:10:40

标签: ios uiscrollview swift2 uisegmentedcontrol

我需要为滚动视图设置动画以显示相同的视图,但根据分段控件上的选择使用不同的值。我需要从左到右&从右到左的幻灯片动画在同一UI上显示不同的值。我不想创建重复的视图。

1 个答案:

答案 0 :(得分:0)

我遇到了完全相同的问题。想要避免为了动画而创建多个tableviews。 以下是我解决它的方法:

基本理念:获取tableview的屏幕截图并将其显示在根视图上。然后,从左到右(或从右到左,根据段控制的切换)执行tableview的幻灯片动画

向右滑动

代码

func switchToLeft() {
    let newIndex = currentIndex - 1
    if newIndex > 0 {
        let sS = showScreenShot()
        self.tableView.animateFromLeft(0.5){
            sS.removeFromSuperview()
        }
        //update data and RELOAD your tableview here
    }
}

func showScreenShot() -> UIView{
    let image = getScreenShot()
    let imageView = UIImageView(image: image)
    let blankView = UIView(frame: self.view.frame)
    blankView.addSubview(imageView)
    self.tableView.superview?.addSubview(blankView)
    self.tableView.superview?.bringSubviewToFront(self.tableView)
    return blankView
}

func getScreenShot() -> UIImage?{
    let viewToRender = self.tableView
    let contentOffset = self.tableView.contentOffset

    UIGraphicsBeginImageContext(viewToRender.bounds.size)

    let ctx = UIGraphicsGetCurrentContext()!

    // need to translate the context down to the current visible portion of the tableview

    CGContextTranslateCTM(ctx, 0, -contentOffset.y-tableHeaderHt)

    viewToRender.layer.renderInContext(ctx)

    let image = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()
    return image
}

离开animateFromLeft的代码作为练习!