2015-10-07 3 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 
} 

Это работает, но иногда я получаю это сообщение на выходе:

мгновенных снимков вид, что не было вынесено результаты в пустой снимок. Убедитесь, что ваше представление было просмотрено как минимум один раз перед снимками или снимками после обновлений экрана.

Я получаю его только для некоторых из ячеек (всего несколько) и не всегда. Иногда он генерирует моментальный снимок из этой ячейки, когда он возвращает нуль. Я проверил, и у меня всегда есть ячейка ввода. Так почему это? Почему рендеринг результатов в пустой снимок? Благодаря

Edit: Я добавил жест распознаватель к моему 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', но это рабочее решение, и я заменяю свой код вашим. благодаря –

Смежные вопросы