2010-09-02 2 views
3

Я использую CGRect для отображения изображения. Я бы хотел, чтобы CGRect использовал ширину и высоту изображения без указания его.CGRect изменение размера изображения

может это:

CGRectMake(0.0f, 40.0f, 480.0f, 280.0f); 

стал таким:

CGRectMake(0.0f, 40.0f, myImage.width, myImage.height); 

некоторые изображения искажаются, когда я задать параметры.

вот код:

CGRect myImageRect = CGRectMake(0.0f, 40.0f, 480.0f, 280.0f); 
UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect]; 
[myImage setImage:[UIImage imageNamed:recipe.img]]; 

спасибо за любую помощь.

ответ

7

После того, как у вас есть UIImage, вы можете найти его размер, глядя на size собственности:

UIImage * image = [UIImage imageNamed:recipe.img]; 
CGRect rect = CGRectMake(0.0f, 40.0f, image.size.width, image.size.height); 

UIImageView * imageView = [[UIImageView alloc] initWithFrame:rect]; 
[imageView setImage:image]; 
+0

, который отлично поработал. спасибо Если бы я хотел центрировать прямоугольник, вы бы сделали это с точками «0.0f, 40.0f» или есть лучший способ, так как изображения разных размеров? – hanumanDev

+0

Вы можете по умолчанию установить их на 0,0, а затем установить свойство центра изображения: http://developer.apple.com/iphone/library/documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instp/UIView/center Возможно, стоит свернуть документацию для UIImage, UIImageView и UIView, потому что есть, вероятно, другие вещи, которые будут вам полезны. Чтение списка доступных методов и свойств в верхней части было бы хорошим началом, так что бы прочитать вводные разделы этих трех страниц, просто чтобы понять, что Apple ставит где. – Douglas

+0

ОК, еще раз спасибо. – hanumanDev

3

Эта категория на UIImage может быть полезна.

Используйте это так: aImage =[aImage imageByScalingProportionallyToSize: myImageRect]

@implementation UIImage (Extras) 

- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize { 

    UIImage *sourceImage = self; 
    UIImage *newImage = nil; 

    CGSize imageSize = sourceImage.size; 
    CGFloat width = imageSize.width; 
    CGFloat height = imageSize.height; 

    CGFloat targetWidth = targetSize.width; 
    CGFloat targetHeight = targetSize.height; 

    CGFloat scaleFactor = 0.0; 
    CGFloat scaledWidth = targetWidth; 
    CGFloat scaledHeight = targetHeight; 

    CGPoint thumbnailPoint = CGPointMake(0.0,0.0); 

    if (CGSizeEqualToSize(imageSize, targetSize) == NO) { 

     CGFloat widthFactor = targetWidth/width; 
     CGFloat heightFactor = targetHeight/height; 

     if (widthFactor < heightFactor) 
      scaleFactor = widthFactor; 
     else 
      scaleFactor = heightFactor; 

     scaledWidth = width * scaleFactor; 
     scaledHeight = height * scaleFactor; 

     // center the image 

//  if (widthFactor < heightFactor) { 
//   thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
//  } else if (widthFactor > heightFactor) { 
//   thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5; 
//  } 

     //thumbnailPoint.x 
    } 


    // this is actually the interesting part: 

    UIGraphicsBeginImageContext(targetSize); 

    CGRect thumbnailRect = CGRectZero; 
    thumbnailRect.origin = thumbnailPoint; 
    thumbnailRect.size.width = scaledWidth; 
    thumbnailRect.size.height = scaledHeight; 

    [sourceImage drawInRect:thumbnailRect]; 

    newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    if(newImage == nil) NSLog(@"could not scale image"); 


    return newImage ; 
} 

@end; 
+0

Спасибо за подсказку! Поскольку раньше я не занимался модификацией классов Objective-C, они оказались полезными: [Apple] (https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html# // apple_ref/doc/uid/TP40011210-CH6-SW3) и [Wikipedia] (http://en.wikipedia.org/wiki/Objective-C#Categories) – cloudrave

Смежные вопросы