2017-02-16 79 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)!