objective c - Ajuste imageView de UITableViewCell a 40x40
objective-c iphone (7)
Uso las mismas imágenes grandes en tableView y detailView. Es necesario hacer que imageView se llene 40x40 cuando se muestra un imags en tableView, pero se extiende en la mitad de una pantalla. Jugué con varias propiedades pero no obtuve ningún resultado positivo:
[cell.imageView setBounds:CGRectMake(0, 0, 50, 50)];
[cell.imageView setClipsToBounds:NO];
[cell.imageView setFrame:CGRectMake(0, 0, 50, 50)];
[cell.imageView setContentMode:UIViewContentModeScaleAspectFill];
Estoy usando SDK 3.0 con compilación en "Objetos de celda en estilos predefinidos".
Guardo en la memoria caché una versión en miniatura, ya que el uso de imágenes grandes reducidas sobre la marcha consume demasiada memoria.
Aquí está mi código de miniatura:
- (UIImage *)thumbnailOfSize:(CGSize)size {
if( self.previewThumbnail )
return self.previewThumbnail; // returned cached thumbnail
UIGraphicsBeginImageContext(size);
// draw scaled image into thumbnail context
[self.preview drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *newThumbnail = UIGraphicsGetImageFromCurrentImageContext();
// pop the context
UIGraphicsEndImageContext();
if(newThumbnail == nil)
NSLog(@"could not scale image");
self.previewThumbnail = newThumbnail;
return self.previewThumbnail;
}
Solo asegúrese de borrar correctamente la miniatura en caché si cambia su imagen original (auto.preview en mi caso).
Intenta configurar UIImageView.autoresizesSubviews
y / o UIImageView.contentStretch
.
Pensé que la sugerencia de Ben Lachman de generar miniaturas por adelantado en lugar de hacerlo sobre la marcha era inteligente, así que adapté su código para que pudiera manejar una matriz completa y hacerla más portátil (sin nombres de propiedades codificadas).
- (NSArray *)arrayOfThumbnailsOfSize:(CGSize)size fromArray:(NSArray*)original {
NSMutableArray *temp = [NSMutableArray arrayWithCapacity:[original count]];
for(UIImage *image in original){
UIGraphicsBeginImageContext(size);
[image drawInRect:CGRectMake(0,0,size.width,size.height)];
UIImage *thumb = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[temp addObject:thumb];
}
return [NSArray arrayWithArray:temp];
}
Pude hacer que esto funcionara usando el constructor de interfaz y una tableviewcell. Puede establecer las propiedades de "Modo" para una vista de imagen en "Ajuste de aspecto". No estoy seguro de cómo hacer esto programáticamente.
Puse el código de Ben como una extensión en mi archivo NS-Extensions para poder decirle a cualquier imagen que haga una miniatura de sí mismo, como en:
UIImage *bigImage = [UIImage imageNamed:@"yourImage.png"];
UIImage *thumb = [bigImage makeThumbnailOfSize:CGSizeMake(50,50)];
Aquí está el archivo .h:
@interface UIImage (PhoenixMaster)
- (UIImage *) makeThumbnailOfSize:(CGSize)size;
@end
y luego en el archivo NS-Extensions.m:
@implementation UIImage (PhoenixMaster)
- (UIImage *) makeThumbnailOfSize:(CGSize)size
{
UIGraphicsBeginImageContextWithOptions(size, NO, UIScreen.mainScreen.scale);
// draw scaled image into thumbnail context
[self drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *newThumbnail = UIGraphicsGetImageFromCurrentImageContext();
// pop the context
UIGraphicsEndImageContext();
if(newThumbnail == nil)
NSLog(@"could not scale image");
return newThumbnail;
}
@end
Tengo el mío envuelto en una UIView y uso este código:
imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight;
[self addSubview:imageView];
imageView.frame = self.bounds;
(self es el envoltorio UIView, con las dimensiones que quiero, uso AsyncImageView ).
es posible que puedas usar esto?
yourTableViewController.rowImage = [UIImage imageNamed:@"yourImage.png"];
y / o
cell.image = yourTableViewController.rowImage;
y si sus imágenes ya son de 40x40, entonces no debería tener que preocuparse por establecer límites y cosas ... pero, también soy nuevo en esto, así que no lo sé, no he jugado con la fila de la Vista de tabla / imágenes de la célula mucho
espero que esto ayude.