Можно ли анимировать ширину UIButton типа UIButtonStyleCustom? - PullRequest
1 голос
/ 05 августа 2010

У меня есть анимация по размеру кадра, которая прекрасно работает, когда UIButton представляет собой UIButtonTypeRoundedRect.Но не имеет видимого влияния, когда я использую UIButtonStyleCustom с фоновым изображением.Мой код анимации здесь:

[UIView beginAnimations:@"MyAnimation" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.25];
CGRect tempFrame = myButton.frame;
tempFrame.size.width = tempFrame.size.width + 100.0f;
myButton.frame = tempFrame;
[UIView commitAnimations];

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 06 августа 2010

Эй, ребята, я наконец решил свою проблему.Я вложил в подкласс UIView и добавил два UIImageView s и UIButton к нему.Анимация теперь великолепна!

Вот код:

.h

#import <UIKit/UIKit.h>

@interface NNAnimatableButton : UIView {

    UIImageView *backgroundImageView;
    UIImageView *imageView;
    UIButton *button;
}

@property (nonatomic, retain) UIImageView *backgroundImageView;
@property (nonatomic, retain) UIImageView *imageView;
@property (nonatomic, retain) UIButton *button;

@end

.m

#import "NNAnimatableButton.h"

@implementation NNAnimatableButton

@synthesize backgroundImageView, imageView, button;

- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {

        CGRect rect = CGRectMake(0.0f, 0.0f, frame.size.width, frame.size.height);

        NSUInteger autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin;

        // Initialization code.
        backgroundImageView = [[UIImageView alloc] initWithFrame:rect];
        backgroundImageView.autoresizingMask = autoresizingMask;

        imageView = [[UIImageView alloc] initWithFrame:rect];
        imageView.autoresizingMask = autoresizingMask;
        imageView.contentMode = UIViewContentModeCenter;

        button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.autoresizingMask = autoresizingMask;
        [button setFrame:rect];

        [self addSubview:backgroundImageView];
        [self addSubview:imageView];
        [self addSubview:button];

        [backgroundImageView release];
        [imageView release];
    }
    return self;
}

- (void)dealloc {

    [backgroundImageView release];
    [imageView release];
    [button release];

    [super dealloc];
}

@end
0 голосов
/ 05 августа 2010

Я попробовал ваш пример в моем XCode. Все отлично работает с обеими кнопками. Итак, некоторые дополнительные вопросы ... Вы используете Background или Image? Что такое режим просмотра (Scale to Fill или что-то еще)? И где вы тестируете свое приложение (устройство или симулятор, iphone 3 или iphone 4 или ...)?

Также сделайте несколько проверок. Убедитесь, что myButton подключен в IB (возможно, вы создали новую кнопку и забыли это сделать). Убедитесь, что этот код работает (возможно, вы забыли соединение с необходимым сенсорным действием).

...