J'ai besoin de dupliquer une vue, avec toutes ses sous-visions. P>
Quelqu'un sait-il comment le faire? p>
6 Réponses :
La voie la plus facile (mais probablement pas la plus rapide) est de l'archiver dans un objet Nsdata et de le déranger tout de suite.
NSData *tempArchive = [NSKeyedArchiver archivedDataWithRootObject:myView]; UIView *myViewDuplicate = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchive];
Malheureusement, cela ne fonctionnera pas si votre vue a des sous-espions / objets qui ne peuvent pas être archivés (comme un uiimage).
Vous dites donc que cela ne fonctionnera pas pour UiImageviews?
@Iulianonofrei Avez-vous trouvé une solution pour l'utiliser pour UiImageView par exemple uIView?
@AkshaysUnderwani, non :( J'ai trouvé [cette bibliothèque] (UIView-Copy) mais je ne l'ai pas encore testé. Faites-moi savoir si vous le testez si cela fonctionne ou non.
@Lulianonofrei J'ai reçu une autre vue d'UiImage, en créant un CGIMageref d'origine UIView si celui-ci de type UIImageView, utilisez ensuite l'approche suivante et copiez CGIMageref sur Dupliquer ou votre copie de UIView. Vous pouvez avoir plus d'informations à partir de cette réponse Stackoverflow.com/a/26214969/3824808
Selon Cette réponse , il devrait également fonctionner avec uiImageView code>.
Cela ne fonctionne pas pour UiImageView sur iOS8. Fonctionne bien les 10 et 11.
Pour archiver tout objet UIIMAGE les convertit simplement en image d'un type d'un type ou d'une autre (PNG par exemple) et d'archiver que Nsdata Object, puis dans le non-arrive que vous restaurez l'uImage avec imageWithData: P>
Voici une nouvelle méthode que vous pouvez utiliser: Utilisez la méthode UIVIEW:
- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates
On peut facilement copier un uiviView par un processus d'archivage et d'une camarivité. mais cela ignore uiImageView, donc pour UiImageView le faire de cette manière, P> UIImage *img = [UIImage imageNamed: @"myImage"];
UIImage *img2 = [UIImage imageWithCGImage:img.CGImage scale:img.scale orientation:img.imageOrientation];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:img2];
UIImage *imgCopy = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"%@, %@", imgCopy, NSStringFromCGSize(imgCopy.size)); // -> <UIImage: 0x7fa013e766f0>, {50, 53}
Cette réponse montre comment faire la même chose à Swift que la réponse acceptée se trouve dans l'objectif-c. p>
Vous pouvez faire glisser votre vue personnalisée en dehors de la vue racine de la vue ViewController.
Dans la mise en œuvre de la classe d'affichage personnalisée, remplacez les méthodes enconde / décodage. Réaliser les connexions Iboutlets et Ibactions ne seront pas archivées en mémoire. p> myCustomview.h: p> échantillon de réutilisation de la vue personnalisée dans la vueController.m: p> < Pré> xxx pré> p>