2017-02-16 81 views
1

我有和表格视图,当用户点击一个按钮我希望它重新加载它的数据和改变许多其他的东西。可悲的是,我的用户对转换/动画的可用选项并不满意,并希望进行滑动转换。但是,我无法在网上找到任何信息来做到这一点。这里是我的代码:幻灯片转换使用UIView.transition()方法

UIView.transition(with: view, duration: 0.5,options: .transitionCurlUp,animations: 
      {() -> Void in 
       self.schedule.reloadData() 
       self.formatter.dateFormat = "yyyy-MM-dd" 
       let dayOfWeek = self.week[self.getDayOfWeek(self.currentDate)!-1] 
       var forReturn = dayOfWeek.getCourseNumber() 
       if forReturn>3{ 
        forReturn = forReturn + 1 
        self.refreshButton.isHidden = false 
        self.noClasses.isHidden = true 
       }else{ 
        self.refreshButton.isHidden = true 
        self.noClasses.isHidden = false 
       } 
       self.changeWeek() 
       let startDate = self.formatter.string(from: self.startDateBase) 
       if self.currentDate == startDate{ 
        self.other1.text = "Today's Schedule" 
       }else{ 
        self.formatter.dateFormat = "yyyy-MM-dd" 
        self.currentDate = self.formatter.string(from: self.date) 
        self.other1.text = dayNames[self.getDayOfWeek(self.currentDate)!-1] + " Schedule" 
       } 
     }, completion: nil 
     ); 

谢谢。

+0

如果你想为单元重载滑动过渡,你做了['reloadRows'(https://开头开发商.apple.com/reference/uikit/uitableview/1614935-reloadrows)或['reloadSections'](https://developer.apple.com/reference/uikit/uitableview/1614954-reloadsections)与['UITableViewRowAnimation']( https://developer.apple.com/reference/uikit/uitableviewrowanimation)'.right'或'.left'?这是获取行或表更新的幻灯片动画的最简单方法。 – Rob

+0

问题是我想动画整个页面的变化。不只是表格视图。 – joshLor

回答

1

你可以去老同学在此:

  • 采取view的快照;
  • 将其添加到视图层次结构中;
  • 将偏移转换应用于快照视图和view,本身;
  • 动画将主视图的transform恢复为.identity;和
  • 完成动画后删除快照视图。

这样:

let snapshotView = snapshot() 
view.addSubview(snapshotView) 
snapshotView.transform = CGAffineTransform(translationX: -view.bounds.size.width, y: 0) 
view.transform = CGAffineTransform(translationX: view.frame.size.width, y: 0) 

// do whatever updates to the views you want here 
tableView.reloadData() 

UIView.animate(withDuration: 0.5, animations: { 
    self.view.transform = .identity 
}, completion: { _ in 
    snapshotView.removeFromSuperview() 
}) 

快照,我用:

func snapshot() -> UIView { 
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, true, 0) 
    view.drawHierarchy(in: view.bounds, afterScreenUpdates: false) 
    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    let imageView = UIImageView(image: image) 
    imageView.frame = view.bounds 
    return imageView 
} 

顺便问一下,你也可以使用snapshotView(afterScreenupdates:),比drawHierarchy快,但它由于某种原因在7+模拟器中不起作用(请参阅https://forums.developer.apple.com/thread/63438),所以我对此不满意。但是,如果你想这样做,你会做更换shapshotView声明有:

let snapshotView = view.snapshotView(afterScreenUpdates: false)!