Поиск…


Создайте UIImageView

Чтобы программно создать UIImageView , все, что вам нужно сделать, это создать экземпляр UIImageView :

//Swift
let imageView = UIImageView()

//Objective-C
UIImageView *imageView = [[UIImageView alloc] init];

Вы можете установить размер и положение UIImageView с помощью CGRect :

//Swift
imageView.frame = CGRect(x: 0, y: 0, width: 200, height: 200)

//Objective-C
imageView.frame = CGRectMake(0,0,200,200);

Или вы можете установить размер во время инициализации:

//Swift
UIImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))

//Objective-C
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,200,200);

//Alternative way of defining frame for UIImageView
UIImageView *imageView = [[UIImageView alloc] init];
CGRect imageViewFrame = imageView.frame;
imageViewFrame.size.width = 200;
imageViewFrame.size.height = 200;
imageViewFrame.origin.x = 0;
imageViewFrame.origin.y = 0;
imageView.frame = imageViewFrame;

Примечание. Вы должны импортировать UIKit для использования UIImageView .

Назначение изображения в UIImageView

Вы можете назначить изображение в UIImageView во время инициализации или позже с помощью свойства image :

//Swift
UIImageView(image: UIImage(named: "image1"))

UIImageView(image: UIImage(named: "image1"), highlightedImage: UIImage(named: "image2"))

imageView.image = UIImage(named: "image1") 

//Objective-C
[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1"];

[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1"] highlightedImage:[UIImage imageNamed:@"image2"]];

imageView.image = [UIImage imageNamed:@"image1"];

Анимация UIImageView

Вы можете анимировать UIImageView , быстро отображая изображения на нем в последовательности, используя свойства анимации UIImageView :

imageView.animationImages = [UIImage(named: "image1")!,
                             UIImage(named: "image2")!,
                             UIImage(named: "image3")!,
                             UIImage(named: "image4")!,
                             UIImage(named: "image5")!,
                             UIImage(named: "image6")!,
                             UIImage(named: "image7")!,
                             UIImage(named: "image8")!] 
imageView.animationDuration = 0.3
imageView.animationRepeatCount = 1

Свойством animationImages является Array UIImages который запускается сверху вниз, когда анимация запускается.

Свойство animationDuration - это Double высказывание, сколько секунд будет выполняться анимация.

Свойство animationRepeatCount - это Int который говорит, сколько раз анимация будет запущена.

Чтобы запустить и остановить анимацию, вы можете вызвать соответствующие методы для этого:

imageView.startAnimating()
imageView.stopAnimating()

Существует метод isAnimating() который возвращает Boolean значение, указывающее, работает ли анимация в данный момент или нет.

Обратите внимание, что это не очень эффективный способ создания анимаций: он довольно медленный и ресурсоемкий. Подумайте, используя слои или спрайты для получения лучших результатов

Создание изображения в круг или закругление

В этом примере показано, как сделать UIView или UIImageView округленным с некоторым радиусом следующим образом:

пример скриншота

Objective-C

someImageView.layer.cornerRadius = CGRectGetHeight(someImageView.frame) / 2;
someImageView.clipsToBounds = YES;

стриж

someImageView.layer.cornerRadius = someImageView.frame.height/2
// this should alleviate the performance hit that adding transparency may cause - see http://stackoverflow.com/a/6254531/189804
// Be sure to check scrolling performance with Instruments if you take this approach.
someImageView.layer.shouldRasterize = true
someImageView.clipsToBounds = true // All parts of the image that are outside its bounds (the frame) are cut out (makes the rounded corners visible)

Предполагается, что если вы используете автозапуск, то вы someImageView.layer.cornerRadius код viewDidLayoutSubviews в viewDidLayoutSubviews . Это позволит обновить изображение cornerRadius если изображение изменит размер.

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    someImageView.layer.cornerRadius = someImageView.frame.size.width/2
    someImageView.layer.masksToBounds = true
}

UIImage, замаскированный ярлыком

Это делает изображение замаскированным в форме букв метки:

Objective-C

self.maskImage.layer.mask = self.maskLabel.layer;
self.maskImage.layer.masksToBounds = YES;

Swift 3

maskImageView.mask = maskLabel
maskImageView.masksToBounds = true

Вот результат:

результат

Изменение цвета изображения

//Swift
imageView.tintColor = UIColor.redColor()
imageView.image = imageView.image?.imageWithRenderingMode(.AlwaysTemplate)

//Swift 3
imageView.tintColor = UIColor.red
imageView.image = imageView.image?.withRenderingMode(.alwaysTemplate)

//Objective-C
imageView.tintColor = [UIColor redColor];
imageView.image = [imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]

Как свойство Mode влияет на изображение

Свойство режима содержимого представления указывает, как его содержимое должно быть выложено. В Interface Builder в Инспекторе атрибутов могут быть выбраны различные режимы.

скриншот инспектор атрибутов

Давайте посмотрим, как работают различные режимы.

Скриншот скриншота интерфейса

Масштаб для заполнения

Масштаб для заполнения

Высота и ширина изображения растягиваются в соответствии с размером UIImageView .

Aspect Fit

Aspect Fit

Самая длинная сторона (высота или ширина) изображения растягивается в соответствии с представлением. Это делает изображение настолько большим, насколько возможно, пока оно покажет все изображение, а не искажает высоту или ширину. (Я установил фон UIImageView на синий, чтобы его размер был ясным.)

Аспект заполнения

Аспект заполнения

Самая короткая сторона (высота или ширина) изображения растягивается в соответствии с представлением. Как и «Aspect Fit», пропорции изображения не искажаются от их исходного соотношения сторон.

Перерисовка

Перерисовка

Перерисовать только для пользовательских представлений, которые должны выполнять собственное масштабирование и изменение размера. Мы не используем пользовательский вид, поэтому нам не следует использовать Redraw. Обратите внимание: здесь UIImageView просто дает нам тот же результат, что и Scale to Fill, но он делает больше работы за кулисами.

О Redraw, в документации Apple говорится:

Режимы содержимого хороши для повторного использования содержимого вашего представления, но вы также можете настроить режим содержимого на значение UIViewContentModeRedraw когда вы специально хотите, чтобы ваши пользовательские представления перерисовывались во время операций масштабирования и изменения размера. Настройка режима контента вашего представления на это значение заставляет систему вызывать метод drawRect: ваш вид в ответ на изменения геометрии. В общем, вам следует избегать использования этого значения, когда это возможно, и вы, безусловно, не должны использовать его со стандартными представлениями системы.

Центр

Центр

Изображение сосредоточено в представлении, но длина и ширина изображения не растянуты.

верхний

верхний

Верхний край изображения центрируется по горизонтали в верхней части изображения, а длина и ширина изображения не растянуты.

Низ

Низ

Нижний край изображения центрируется горизонтально в нижней части изображения, а длина и ширина изображения не растянуты.

Оставил

Оставил

Левый край изображения центрируется по вертикали слева от представления, а длина и ширина изображения не растянуты.

Правильно

Правильно

Правый край изображения центрирован по вертикали справа от представления, а длина и ширина изображения не растянуты.

Верхний левый

Верхний левый

Верхний левый угол изображения расположен в верхнем левом углу окна. Длина и ширина изображения не растянуты.

В правом верхнем углу

В правом верхнем углу

Верхний правый угол изображения расположен в верхнем правом углу окна. Длина и ширина изображения не растянуты.

Нижний левый

Нижний левый

Нижний левый угол изображения расположен в левом нижнем углу окна. Длина и ширина изображения не растянуты.

Нижний правый

Нижний правый

Нижний правый угол изображения расположен в правом нижнем углу окна. Длина и ширина изображения не растянуты.

Заметки

  • Этот пример исходит отсюда .

  • Если содержимое (в нашем случае изображения) имеет тот же размер, что и представление (в нашем случае UIImageView ), то изменение режима содержимого не будет иметь заметной разницы.

  • См. Этот и этот вопрос для обсуждения режимов контента для представлений, отличных от UIImageView .

  • В Swift, чтобы программно настроить режим содержимого, вы делаете следующее:

      imageView.contentMode = UIViewContentMode.scaleToFill
      imageView.contentMode = UIViewContentMode.scaleAspectFit
      imageView.contentMode = UIViewContentMode.scaleAspectFill
      imageView.contentMode = UIViewContentMode.redraw
      imageView.contentMode = UIViewContentMode.center
      imageView.contentMode = UIViewContentMode.top
      imageView.contentMode = UIViewContentMode.bottom
      imageView.contentMode = UIViewContentMode.left
      imageView.contentMode = UIViewContentMode.right
      imageView.contentMode = UIViewContentMode.topLeft
      imageView.contentMode = UIViewContentMode.topRight
      imageView.contentMode = UIViewContentMode.bottomLeft
      imageView.contentMode = UIViewContentMode.bottomRight
    


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow