我需要为滚动视图设置动画以显示相同的视图,但根据分段控件上的选择使用不同的值。我需要从左到右&从右到左的幻灯片动画在同一UI上显示不同的值。我不想创建重复的视图。
答案 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
的代码作为练习!