2015-10-07 67 views
2

我想長時間獲取單元格的快照,並使其工作。我這段代碼創建快照:獲取某些單元格的快照無法正常工作

func customSnapShotFrom(view:UIView) -> UIView { // calling this with UITableViewCell input 
    let snapshot:UIView = view.snapshotViewAfterScreenUpdates(false) // here I tried true and false 
    snapshot.layer.masksToBounds = false 
    snapshot.layer.cornerRadius = 0.0 
    snapshot.layer.shadowOffset = CGSizeMake(2.0, 2.0) 
    snapshot.layer.shadowOpacity = 1.0 
    return snapshot 
} 

它的工作,但有時我在輸出得到這個消息:

快照,在一個空 快照尚未呈現結果的視圖。在屏幕更新之後,確保您的視圖至少在 快照或快照之前呈現一次。

我只爲一些細胞(只有少數)得到它,並不總是。有時它會在該單元格返回nil時生成快照。我已經檢查過,並且總是輸入單元格。那爲什麼呢?爲什麼渲染結果爲空快照?由於

編輯: 我已經添加了手勢識別到我的tableView:

let longPress = UILongPressGestureRecognizer(target: self, action: "longPressDetected:") 
self.tableView.addGestureRecognizer(longPress) 

,我在longPressDetected方法創建快照:

func longPressDetected(sender: AnyObject) { 
    ... 
    switch (state) { 
    case UIGestureRecognizerState.Began : 

      ... 
      let cell:UITableViewCell = self.tableView.cellForRowAtIndexPath(indexPath)! 
      snapshot = self.customSnapShotFrom(cell) 
    ... 

我迅速解決感謝kirander answer

func customSnapShotFrom(view:UIView) -> UIView { 

    UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0) 
    view.layer.renderInContext(UIGraphicsGetCurrentContext()!) 
    let cellImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    let imageView = UIImageView(image: cellImage) 
    imageView.layer.masksToBounds = false 
    imageView.layer.cornerRadius = 0.0 
    imageView.layer.shadowOffset = CGSizeMake(2.0, 2.0) 
    imageView.layer.shadowRadius = 4.0 
    imageView.layer.shadowOpacity = 1.0 
    return imageView 
} 
+0

這個代碼從哪裏調用此方法? – kirander

+0

我編輯了我的問題。我從longPressDetected方法中刪除了其他代碼,因爲我認爲這個問題並不重要。 –

+0

也許是因爲細胞被選中?嘗試關閉單元格的選擇。 – kirander

回答

2

嘗試從here

// make an image from the pressed tableview cell 
UIGraphicsBeginImageContextWithOptions(inputView.bounds.size, NO, 0); 
[inputView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *cellImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

// create and image view that we will drag around the screen 
UIView *snapshot = [[UIImageView alloc] initWithImage:cellImage]; 
+0

雖然它不是解決'snapshotViewAfterScreenUpdates'功能的問題,但它是可行的解決方案,我用你的代碼替換我的代碼。謝謝 –

相關問題