2016-05-27 4 views

Antwort

0

Ich hatte genau das gleiche Problem. Wollte vermeiden, mehrere Tabellenansichten nur aus Gründen der Animation zu erstellen. Hier ist, wie ich es gelöst habe:

Grundidee: Machen Sie einen Screenshot von tableview und zeigen Sie es in der Stammansicht. Dann tun, um eine Dia-Animation von Tableview von links nach rechts (oder von rechts nach links in Abhängigkeit von der Schaltsegmentsteuerung)

-Code, wenn geklaut nach rechts

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 
} 

Code Weglassen für animateFromLeft als eine Übung!

Verwandte Themen