Как повернуть изображение в UIButton и НЕ масштабировать его
Я пытаюсь повернуть свойство imageView UIBUtton без его масштабирования. Образ, о котором идет речь, 24x18 - шире, чем он высок, но когда он повернут на место, изображение масштабируется, чтобы сохранить эти размеры - оставляя меня с очень скрипучим изображением. Как я могу предотвратить это?
Ниже мой код.
-(IBAction)rotateButton
{
NSLog( @"Rotating button" );
[UIView beginAnimations:@"rotate" context:nil];
[UIView setAnimationDuration:.5f];
if( CGAffineTransformEqualToTransform( button.imageView.transform, CGAffineTransformIdentity ) )
{
button.imageView.transform = CGAffineTransformMakeRotation(M_PI/2);
} else {
button.imageView.transform = CGAffineTransformIdentity;
}
[UIView commitAnimations];
}
Этот не работает, если я применяю преобразование к кнопке вместо button.imageView, поэтому я предполагаю, что это свойство imageView, которое я неправильно настраиваю.
Ваши подсказки и боны приветствуются
М.
Ответы
Ответ 1
Я видел, что свойство UIImageView UIButtons ведет себя очень странно - кажется, что некоторые из их свойств доступны только для чтения, включая параметр UIViewContentMode, о котором вы здесь говорите.
Лучшее решение, которое я нашел, это подражать настройке "кнопка, содержащая изображение" с помощью отдельного UIImageView, и пустой UIButton с настраиваемым стилем, расположенный поверх него. Дает вам большую гибкость для управления изображением.
Ответ 2
Применить следующий код при инициализации вида где-то в поле зрения загрузился. Это поможет. Ответ, который вы получили выше, не является верным ответом:)
button.imageView.clipsToBounds = NO;
button.imageView.contentMode = UIViewContentModeCenter;
Ответ 3
Я обнаружил, что подклассом UIButton
удалено преобразование во время layoutSubviews
, как это:
class RotatableImageButton: UIButton {
override func layoutSubviews() {
let originalTransform = imageView?.transform
imageView?.transform = CGAffineTransformIdentity
super.layoutSubviews()
if let originalTransform = originalTransform {
imageView?.transform = originalTransform
}
}
}