Как повернуть изображение в 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
        }
    }
}