У меня есть пользовательский UIView с вложенными представлениями типа UIImageView, UILabel и UIButton.Представление создается в коде, подобном следующему:
- (void)setupView
{
popupView = [[UIView alloc] initWithFrame:CGRectMake(-116, -61, 247, 59)];
popupView.autoresizingMask = 63;
UIImageView *bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bubble.png"]];
bgImageView.autoresizingMask = 63;
[popupView addSubview:bgImageView];
[bgImageView release];
textLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 8, 180, 20)];
textLabel.autoresizingMask = 63;
textLabel.font = [UIFont fontWithName:@"DefaultNormal" size:16];
textLabel.text = @"DYNAMIC TEXT";
[popupView addSubview:textLabel];
popupButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
[rightAccessoryButton setImage:[UIImage imageNamed:@"btn-tick.png"] forState:UIControlStateNormal];
popupButton.frame = CGRectMake(208, 8, 32, 32);
popupButton.autoresizingMask = 63;
[popupView addSubview:rightAccessoryButton];
}
Я установил для всех их autoresizingMask
s значение 63, что в основном означает, что все находится в положении ON (я не знаю лучшего способа сделать этокроме размещения всех констант в огромной строке кода!).Затем, когда им нужно анимировать всплывающее окно, я делаю это:
- (void)animateIn
{
float pw = 247;
float ph = 59;
// set the view's initial position
popupView.frame = CGRectMake(-pw*0.005+8, -ph*0.01-2, pw*0.01, ph*0.01);
[self addSubview:popupView];
[UIView animateWithDuration:0.12 delay:0.0 options:UIViewAnimationOptionCurveEaseOut|UIViewAnimationOptionLayoutSubviews animations:^(void) {
popupView.frame = CGRectMake(-pw*0.55+8, -ph*1.1-2, pw*1.1, ph*1.1);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.1 delay:0.0 options:UIViewAnimationOptionLayoutSubviews animations:^(void) {
popupView.frame = CGRectMake(-pw*0.475+8, -ph*0.95-2, pw*0.95, ph*0.95);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.075 delay:0.0 options:UIViewAnimationOptionLayoutSubviews animations:^(void) {
popupView.frame = CGRectMake(-round(pw/2-8), -ph-2, pw, ph);
} completion:nil];
}];
}];
}
Немного сложной анимации, но по сути это та же анимация, что и у анимации представления выноски карты.
ТолькоДело в том, что он отлично работает на устройствах iOS 5, но на устройствах iOS 4 все не так!Метка вообще не отображается, кнопка появляется, а затем вылетает, сжимаясь в верхнем правом углу, а фоновое изображение растягивается до неправильного размера и в неправильном месте.
У кого-то еще были проблемыс анимацией в iOS 4?Нужно ли делать что-то иначе, чем в настоящее время, чтобы заставить его работать?