Поиск…
Создайте 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
Самая длинная сторона (высота или ширина) изображения растягивается в соответствии с представлением. Это делает изображение настолько большим, насколько возможно, пока оно покажет все изображение, а не искажает высоту или ширину. (Я установил фон 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