Pour autant que je sache, il n'existe pas de moyen simple de faire cela. Voici une façon de le faire:
Au lieu d'un seul ImageView, créez 3 UIImageView avec une largeur et une hauteur égales (1/3 de l'image originale). ImageView supérieur et inférieur collera respectivement sur le bord supérieur et inférieur, Image du milieu aura une marge inférieure et supérieure flexible. Vous devez définir la propriété contentMode de Middle ImageView sur UIViewContentModeScaleAspectFit
(ou UIViewContentModeCenter
en fonction de la façon dont vous souhaitez gérer la rotation) et les autres sur UIViewContentModeScaleToFill
. Vous pouvez définir toutes ces propriétés à partir de IB.
Vous devez maintenant définir la source d'image de chacun d'après le code. Dans la méthode viewDidLoad
tranche la UIImage en 3 parties en utilisant les solutions de ce post ou en utilisant le code suivant:
-(NSMutableArray *)getImagesFromImage:(UIImage *)image withRow:(NSInteger)rows withColumn:(NSInteger)columns
{
NSMutableArray *images = [NSMutableArray array];
CGSize imageSize = image.size;
CGFloat xPos = 0.0, yPos = 0.0;
CGFloat width = imageSize.width/rows;
CGFloat height = imageSize.height/columns;
for (int y = 0; y < columns; y++) {
xPos = 0.0;
for (int x = 0; x < rows; x++) {
CGRect rect = CGRectMake(xPos, yPos, width, height);
CGImageRef cImage = CGImageCreateWithImageInRect([image CGImage], rect);
UIImage *dImage = [[UIImage alloc] initWithCGImage:cImage];
[images addObject:dImage];
xPos += width;
}
yPos += height;
}
return images;
}
Vous devrez peut-être modifier quelques petites choses, mais nous espérons que vous avez l'idée.
Si vous avez l'option, vous pouvez pré-scinder l'image en 3 parties en utilisant photoshop/gimp et les placer dans le paquet. Dans ce cas, vous n'avez pas besoin de découper l'image dans le code et tout peut être fait depuis IB.
Espérons que cela aide :)