在位置之前设置UILabel尺寸的动画

时间:2013-10-23 15:22:43

标签: ios objective-c animation uilabel frame

我试图在三个步骤中同时动画两个UIView(一个UIImageView和一个UILabel):
0)两个视图都在屏幕的左上角
1)然后我改变帧(并标记字体大小),以便视图变得更大,在中心 2)我再次更改框架(并标记字体大小)以将两个视图放在右下角。 (此aniamtion在几秒钟后开始)
3)我从superview中删除了两个视图。

每次动画后,UIImageView都是完美的。对于UILabel,第一个动画作品,第二个没有! 在第一次动画之后,我的标签变得越来越小,在延迟之后,它像图像视图一样移动。我不知道为什么!我使用“setFrame”来改变原点和大小..

我的代码是:

@implementation Animazione
{
  UIImageView * imageView;
  UILabel * message;
}
-(void) startAnimationOn: (UIView *) superView;
{
    UIImage * image = [UIImage imageNamed:@"..."];
    imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,100,100)];
    [imageView setImage:image];
    [superView imageView];
    CGRect startRect = [self startDimension]; //make a CGRect
    [imageView setFrame:startRect];


    message = [[UILabel alloc] init];
    message.text = @"A text";
    message.textAlignment = NSTextAlignmentCenter;
    message.adjustsFontSizeToFitWidth = YES;
    [self setLabelSize: startRect];

    [message setBackgroundColor:[UIColor greenColor]]; 

    [superView addSubview:message];


    [UIView animateWithDuration:2.0
                          delay:3.0
                        options:(UIViewAnimationCurveEaseInOut|UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionBeginFromCurrentState)
                     animations:^{
                         [UIView setAnimationDelegate:self];
                         [UIView setAnimationDidStopSelector:@selector(hideViews:finished:context:)];

                         CGRect big = [self bigDimension];
                         [imageViews setFrame:big];
                         //  [self setLabelSize:big];
                         [message setFrame:big];

                     }
                     completion:^(BOOL finished){
                         NSLog(@"grande");

                     }];

}


  -(void) hideViews:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
 {
    [UIView animateWithDuration:3.0
                          delay:5.0
                        options:(UIViewAnimationCurveEaseInOut|UIViewAnimationOptionAllowUserInteraction)
                     animations:^{

                         [UIView setAnimationDelegate:self];
                         [UIView setAnimationDidStopSelector:@selector(deliteViews:finished:context:)];

                         CGRect finally = [self finallyDimension];
                         [imageView setFrame:finally];
                       //  [self setLabelSize:finally];
                         [message setFrame:finally];

                     }
                     completion:^(BOOL finished){
                         NSLog(@"scomparso");
                     }];

}
}

-(void) deliteViews:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
    [imageView removeFromSuperview];
    [message removeFromSuperview];
    imageView = nil;
    message = nil;
}

}

- (void)setLabelSize: (CGRect) originalDim
{
[message setFrame: originalDim];
message.font = [message.font fontWithSize:originalDim.size.height/8+10];
}

修改

实际上我没有很好地解释我对动画的期望以及它们的作用。 对于第一部动画,我期待:
- 没有3秒钟(延迟)
- imageview和标签同时生长和移动(持续时间2秒)
它发生了。

对于第一部动画,我希望:
- 没有5秒钟(延迟)
- imageview和标签变小并同时移动(持续时间3秒)
真实情况:
- 立即标签更改尺寸
- 没有5秒钟 - imageview变小并移动,标签移动

1 个答案:

答案 0 :(得分:1)

尝试1: 尝试将这些设置设置为您的标签:

[label setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
[label setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];

它将避免被框架压缩(但不会变大)。

尝试2:

尝试使用UITextView而不是UILabel,可能会更好,因为UITextView使用的contentView可能不会立即调整大小。