2013-09-03 7 views
11

Come screen-shot TUTTI i contenuti di tableView? (Tutti i contenuti = visibile sono + Non area visibile)SDK IOS - come schermare il contenuto di TableView?

ho provato questo:

UIGraphicsBeginImageContext(self.tableView.bounds.size); 
[self.tableView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage* image1 = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

self.imageView.image = image1; 

ma non funziona, voglio dire che è screenshot unica area visibile :(


I risolto :))

ecco il codice :)

+ (UIImage *)captureView:(UIScrollView *)view inContentRect:(CGRect)rect{ 
    UIImage* image = nil; 

    CGPoint savedContentOffset = view.contentOffset; 
    CGRect savedFrame = view.frame; 

    UIGraphicsBeginImageContextWithOptions(view.contentSize, 1, 0); 
    view.contentOffset = CGPointZero; 
    view.frame = CGRectMake(0, 0, view.contentSize.width, view.contentSize.height); 

    [view.layer renderInContext: UIGraphicsGetCurrentContext()]; 
    image = UIGraphicsGetImageFromCurrentImageContext(); 

    view.contentOffset = savedContentOffset; 
    view.frame = savedFrame; 

    UIGraphicsEndImageContext(); 

    // after all of this, crop image to needed size 
    return [Utils cropImage:image toRect:rect];         
} 
+0

È necessario ottenere la dimensione della vista di scorrimento racchiude, quindi forse usate: '[(UIScrollView *) super contenSize]' invece di 'self.tableView.bounds.size'? – trojanfoe

+1

Non penso che tu possa farlo. UITableView riutilizza le celle, il che significa che le celle attualmente visibili sono le uniche celle attualmente aggiunte a UITableView. Quando si scorre un UITableView - diciamo in basso - l'UITableView estrae le celle scomparendo in alto, le riconfigura affinché il nuovo contenuto sia disponibile nella parte inferiore e quindi le aggiunge lì. Pertanto, se si fosse in grado di acquisire uno screenshot dell'intero UITableView, si vedrebbe che avrebbe contenuto solo nell'area attualmente visibile di UITableView, in quanto le celle non visualizzate semplicemente non esistono. – Trenskow

+0

@Trenskow In realtà non è così impossibile come hai affermato. Solo un po 'più logica, e puoi farlo :) –

risposta

4
+ (UIImage *)captureView:(UIScrollView *)view inContentRect:(CGRect)rect{ 
    UIImage* image = nil; 

    CGPoint savedContentOffset = view.contentOffset; 
    CGRect savedFrame = view.frame; 

    UIGraphicsBeginImageContextWithOptions(view.contentSize, 1, 0); 
    view.contentOffset = CGPointZero; 
    view.frame = CGRectMake(0, 0, view.contentSize.width, view.contentSize.height); 

    [view.layer renderInContext: UIGraphicsGetCurrentContext()]; 
    image = UIGraphicsGetImageFromCurrentImageContext(); 

    view.contentOffset = savedContentOffset; 
    view.frame = savedFrame; 

    UIGraphicsEndImageContext(); 

    // after all of this, crop image to needed size 
    return [Utils cropImage:image toRect:rect];         
} 
+0

Qualche suggerimento per far apparire correttamente il segmento selezionato di un uisegmentedcointrol? In questo momento, il segmnente selezionato non ha testo in esso. – P5ycH0

+0

Puoi dirmi che cosa stai passando per l'attributo CGRect nel metodo? Nel mio caso sto passando il frame tableview. Ma non mostra tutto il contenuto di tableview .. –

2

Devi usare contentSize.height per ottenere l'altezza del Tableview

Prova questa

UIGraphicsBeginImageContext(self.tableView.contentSize.height); 
[self.tableView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage* image1 = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

self.imageView.image = image1; 
+0

questo farà anche una schermata della sola area visibile della vista tabella. –

0

Sì, si può fare questo. Non posso fornire il codice di lavoro per quello che vuoi, posso solo guidarti su come farlo. Nel ciclo devi ottenere rendering di tutte le parti della tabella cambiando è contentOffset e posizionare ogni immagine nella matrice. Dopo aver ottenuto tutte le parti della vista tabella, è necessario collegare le parti del tavolo a un'immagine (disegnare ogni immagine in cgimagecontext, ricordarsi di impostare la dimensione corretta per l'immagine del risultato). Ecco, non è così difficile :) Spero che questo aiuti, buona fortuna!