2016-11-11 2 views
1

J'ai télécharger plusieurs images (2/3), et je veux le montrer sur mon écran d'accueil à mon UIImageView unique avec le ratio d'aspect de 1: 1 quand il télécharge toujours. Alors, je dessine les images avec ce code:fusionner 2/3 image en 1 image avec divisé par chaque image en utilisant drawinRect iOS objectif C

PHCachingImageManager *imageManager = [PHCachingImageManager new]; 
CGSize canvasSize = CGSizeMake(100*self.uploadAssets.count, 100); 
UIGraphicsBeginImageContext(canvasSize); 

for (int i = 0; i < self.uploadAssets.count; i++){ 
    if ([self.uploadAssets[i] isKindOfClass:[PHAsset class]]) { 
     PHAsset *asset = self.uploadAssets[i]; 


     [imageManager requestImageForAsset:asset 
           targetSize:CGSizeMake(350,350) 
           contentMode:PHImageContentModeAspectFill 
            options:nil 
          resultHandler:^(UIImage * _Nullable result, 
              NSDictionary * _Nullable info) { 
           if (result) { 
            [result drawInRect:CGRectMake(i*100, 0, 100, 100)]; 
           } 
          }]; 
    }else if ([self.uploadAssets[i] isKindOfClass:[Item class]]) { 
     Item *item = self.uploadAssets[i]; 

     NSURL *url = [NSURL URLWithString: item.images[0]]; 
     NSData *imageData = [[NSData alloc] initWithContentsOfURL:url]; 
     UIImage *image = [UIImage imageWithData:imageData]; 
     [image drawInRect:CGRectMake(i*100, 0, 100, 100)]; 
    } 
} 

UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

self.uploadImage = finalImage; 

Le problème est les 3 image devient trop plat (flat image on the top) et non proportionnelle. Je veux que ces images deviennent propotional like this

J'ai changé mon UIImageView en AspectFill ou en AspectFit ou par défaut, mais aucun d'entre eux ne rend l'image affichée correctement. Que devrais-je changer? Puis-je recadrer mon image au milieu seulement pour chaque photo?

+0

au lieu d'affecter cette image à imageView essayez de l'ajouter en tant que contenu de couche, puis réglez la gravité sur AspectFill/AspectFit. Peut-il devenir utile –

+0

que voulez-vous dire par ajouter mon image finale en tant que contenu de couche? je ne comprends pas vraiment, encore nouveau dans le développement iOS –

Répondre

0

Au lieu d'affecter l'image à un UIImageView Créer un vide objet UIView avec la taille du cadre que vous avez besoin comme dans votre cas peut être width = 100 et height = 100

Et à la fin à l'objet UIImage à ce que nouvelle vue couche comme ceci ...

let myLayer = CALayer() 
let myImage = yourFinalImage?.cgImage 
myLayer.frame = myView.bounds 
myLayer.contents = myImage 
myLayer.contents.contentsGravity = kCAGravityResizeAspectFill //Change this property according to your need 
myView.layer.addSublayer(myLayer) 
+0

obtenu le même résultat exactement –

+0

essayer de doubler la taille de l'image par rapport à l'image. Ex ... Si votre largeur de vue de l'image = 100 et hauteur = 100 Ensuite, prenez la hauteur de l'image et la largeur comme 200 –

+0

j'ai essayé aussi, j'utilise 200x200 si j'ai téléchargé 2 image, et 300x300 si j'ai téléchargé 3 image –