Я знаю, что это было задано раньше ... но я думаю, что я делаю все хорошо, но изображение не выглядит хорошо на экране сетчатки. Я слышал, что если нужно отображать UIImage в сетчатке, мне нужно только установить масштаб в 2.0. Но все еще не работает, я не знаю, влияет ли изменение размера и обрезки UIGraphics на качество изображения. обычно я назову свой resizer из setImage внутри пользовательского класса UIImageView (изображение с сервера имеет правильную ширину, но выше, так что предположим, что оно только растёт) в моем контроллере плохо называет это следующим образом:Изменение размера и размещение Retina UIImage с сервера
[customUIImageViewInstance setImage:[UIImage imageWithData:[impreso thumb] scale:isRetina()?2:1]];
в моей пользовательской реализации UIImageView:
-(void)setImage:(UIImage *)image{
if (image==nil) {
[super setImage:nil];
}else{
[super setImage:[self scaleAnImageAspectFillCropHeight:image withNewWide:self.frame.size.width andNewTall:self.frame.size.height]];
}
}
-(UIImage*) scaleAnImageAspectFillCropHeight:(UIImage*) image withNewWide:(NSUInteger) wide andNewTall:(NSUInteger) tall{
if (image.size.width!=wide || image.size.height!=tall){
BOOL retina;
if ([image scale]==2) {
retina = YES;
wide*=2;
tall*=2;
}else{
retina = NO;
}
CGFloat width = image.size.width;
CGFloat height = image.size.height;
CGFloat targetWidth = wide;
CGFloat targetHeight = tall;
CGFloat scaleFactor = 0.0;
CGFloat scaledWidth;
CGFloat scaledHeight;
CGPoint thumbnailPoint = CGPointMake(0.0,0.0);
CGFloat widthFactor = targetWidth/width;
CGFloat heightFactor = targetHeight/height;
scaleFactor = widthFactor; // the width must be all visible, the height might be cropped but that is the inteded behavior
scaledWidth = width * scaleFactor;
scaledHeight = height * scaleFactor;
// centers X if needed, Y starts in 0 because the top part of the image is important
thumbnailPoint.y = 0;
if (widthFactor < heightFactor){
thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
}
UIGraphicsBeginImageContext(CGSizeMake(wide, tall)); // this will crop
CGRect thumbnailRect = CGRectZero;
thumbnailRect.origin = thumbnailPoint;
thumbnailRect.size.width = scaledWidth;
thumbnailRect.size.height = scaledHeight;
[image drawInRect:thumbnailRect];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
if (retina) {
newImage = [UIImage imageWithCGImage:newImage.CGImage scale:2 orientation:newImage.imageOrientation];
}
if(newImage == nil){
[self setContentMode:UIViewContentModeScaleAspectFit];
}else{
//pop the context to get back to the default
UIGraphicsEndImageContext();
return newImage;
}
}
return image;
}
я был отладки ... и это размеры и масштаб являются правильными. Я не знаю, что возится с качеством изображения. Простое объяснение поможет много, thx.
конечно, но исходное изображение имеет ширину ширины * = 2; и даже выше, чем высокий * = 2; ... на самом деле не сетчатка должна сделать ее намного меньше. но в любом случае спасибо, я нашел свою ошибку. Это не был подкласс UIImageView ... insead, это был подкласс класса custum, который является подклассом UIImageView, который также имеет свойство setImage: override, поэтому он делал другой тип изменения размера в этом переопределении, что делало странные результаты ... но я даю вам +1 за попытку помочь :) – user2387149