2013-07-22 4 views
6

Im, пытаясь поместить изображение в uiimageview, изображения загружаются и загружаются динамически, и для них доступно только одно разрешение для приложений ios и android.Отредактируйте UIImage в UIImageView

Так, мне нужно изображения, чтобы сохранить пропорции и масштаб по ширине, я установить UIImageView режим контента UIViewContentModeScaleAspectFill, но это центры изображения, так что он выходит из экрана как для верхней и нижней части изображения будут сконструированы таким образом, что нижняя часть не нужна.

Как я могу выровнять изображение в верхнем левом углу?

И может ли масштабирование UIImageView для меня тоже? или как я могу это сделать?

Заранее спасибо.

EDIT:

Я попытался setcliptobounds и обрезает изображение до размера ImageView, то не моя проблема.

UIViewContentModeTopLeft работает хорошо, но теперь я не могу применить UIViewContentModeScaleAspectFill, или могу ли я применить оба?

+0

Возможный дубликат [UIViewContentModeScaleAspectFill not clipping] (http: // stackoverflow.com/questions/6638623/uiviewcontentmodescaleaspectfill-not-clipping) – Peres

+0

Использование UIViewContentModeTopLeft – Moxy

+0

Используйте этот [imageView setClipsToBounds: YES]; –

ответ

9

Вы можете масштабировать изображение в соответствии с шириной вида изображения в.

Вы можете использовать категорию на UIImage, которая создает новое изображение с выбранной шириной.

@interface UIImage (Scale) 

-(UIImage *)scaleToWidth:(CGFloat)width; 

@end 

@implementation UIImage (Scale) 

-(UIImage *)scaleToWidth:(CGFloat)width 
{ 
    UIImage *scaledImage = self; 
    if (self.size.width != width) { 
     CGFloat height = floorf(self.size.height * (width/self.size.width)); 
     CGSize size = CGSizeMake(width, height) 

     // Create an image context 
     UIGraphicsBeginImageContext(size); 

     // Draw the scaled image 
     [self drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)]; 

     // Create a new image from context 
     scaledImage = UIGraphicsGetImageFromCurrentImageContext(); 

     // Pop the current context from the stack 
     UIGraphicsEndImageContext(); 
    } 
    // Return the new scaled image 
    return scaledImage; 
} 

@end 

Таким образом, вы можете использовать его, чтобы масштабировать изображение

UIImage *scaledImage = [originalImage scaleToWidth:myImageView.frame.size.width]; 
myImageView.contentMode = UIViewContentModeTopLeft; 
myImageView.image = scaledImage; 
+0

Thats ширина масштабирования, но не высота, мне нужно поддерживать соотношение сторон. – Nanoc

+0

Я неправильно понял, чего вы хотели достичь. Я отредактировал -scaleToWidth :, должно быть правильно сейчас – Moxy

+0

Ive сделал сам, но все еще полезно, спасибо. – Nanoc

0

UIView, который является суперклассом UIImageView, имеет свойство contentMode. Вы можете использовать следующую константу для выравнивания по левому краю изображения.

UIViewContentModeTopLeft 

Aligns the content in the top-left corner of the view. 

Чтобы сохранять пропорции

UIViewContentModeScaleAspectFit 

Scales the content to fit the size of the view by maintaining the aspect ratio. Any remaining area of the view’s bounds is transparent. 
+0

Ницца, первый вопрос решен, тогда как я могу масштабировать изображение до ширины UIImageView? – Nanoc

+0

Вы не можете сделать это, если хотите сохранить соотношение сторон. Почему вы не получаете ширину изображения, делая image.size.width; и используйте это, чтобы изменить ширину вашего UIImageView. чем вам не нужно растягивать изображение. –

+0

Изображение будет больше экрана – Nanoc

0

Вы можете не как выровнять и сохранить пропорции с UIImageView, однако существует большой подкласс UIImageView по имени UIImageViewAligned, что делает это возможно для вас. Вы можете найти этот проект на github от here.
Что вам нужно сделать, это выглядит следующим образом:

  1. первой копии заголовка и реализации из UIImageViewAligned-мастер/UIImageViewAligned/к вашему проекту
  2. Вставить объект ImageView из библиотеки объектов в IB к вашему мнению.
  3. Изменить класс ImageView для UIImageViewAligned в идентичности инспектора из утилиты панели
  4. Добавьте желаемое выравнивание в качестве ключевого пути в User Defined Время воспроизведения участка идентичности инспектора

Вот и все атрибуты. Запустите свой проект, чтобы убедиться в этом.

+0

Конечно, я могу, Moxy отвечает отлично. – Nanoc

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