当前位置: 首页 > 知识库问答 >
问题:

在定位之前设置UILabel标注的动画

沈茂
2023-03-14

我试图在三个步骤中一起动画两个UIView(一个UIImageView和一个UILabel):
0)两个视图都在屏幕的左上角
1)然后我改变帧(和标签字体大小,太)所以视图变得更大,在中心2)我再次改变帧(和标签字体大小,太)把两个视图放在boton的右上角。(这个aniamtion开始几秒钟后)
3)我从超级视图中删除两个视图。

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 finallyDimenshtml" target="_blank">ion];
                         [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秒内无任何变化(延迟)
-图像视图和标签变小并同时移动(持续3秒)
实际发生的情况:
-标签立即更改尺寸
-5秒内无任何变化
-图像视图变小并移动,标签移动

共有1个答案

韩楷
2023-03-14

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

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

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

试试2:

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

 类似资料:
  • 我想要“数字”

  • 我正在MyUILabel上执行2个动画。MyUILable是从UILabel派生的自定义类,它实现了只绘制边框的drawRect方法。 这是我的动画代码: 在第一个动画开始时,一条灰色的线出现在我的标签的顶部边缘,并且在所有动画完成后仍然存在。我想提一下,这条线不是我的绘图实现的一部分,即使我的绘图是空的,它也会出现。标签也比最初小一点。 所附图片不成比例。 动画之前: 动画后: 猜猜为什么会这样

  • 问题内容: 如何在Java中的long的特定位置设置/取消设置位? 例如, 我想在位置2设置位,在位置3取消设置位,因此相应的long将是, 有人可以帮我怎么做吗? 问题答案: 要设置一点,请使用: 擦除一下使用: 切换一下用途: 请注意,我使用0b?。您也可以使用任何整数,例如: 但是,这使得更难知道正在更改哪个位。 使用二进制可让您查看将要设置/擦除/切换的确切位。 要动态设置位,请使用: 将

  • 问题内容: 我正在用Java做一些Swing GUI,我想我的问题很简单。如何设置鼠标的位置? 问题答案: 您需要使用机器人 此类用于生成本机系统输入事件,用于测试自动化,自运行演示以及需要控制鼠标和键盘的其他应用程序。Robot的主要目的是促进Java平台实现的自动化测试。 使用类生成输入事件与将事件发布到AWT事件队列或AWT组件不同,因为事件是在平台的本机输入队列中生成的。例如,实际上将移动

  • 问题内容: 我正在实现一个站点登录名,该登录名采用电子邮件/密码组合,检索API令牌,并将其返回给用户以存储(加密)在localStorage中。 目前,在成功发布到,该应用程序将用户重定向到索引页,附有作为查询条件,像这样的令牌: 这可以正常工作,但我希望保持URL尽可能整洁,并将令牌设置为标头: -ing 显示标题设置正确,但是当我将请求登录到索引页面时,它没有显示: 任何建议表示赞赏! 问题

  • 问题内容: 我有一个固定位置的标头(动态高度)。 我需要将容器div放在标题下方。由于页眉高度是动态的,因此无法将固定值用于顶部边距。 如何才能做到这一点? 这是我的CSS: …和HTML: 问题答案: 好!正如我现在看到的问题一样,我意识到由于标题的动态高度,我不想提及固定的边距值。 这是我在此类情况下一直使用的内容。 使用jQuery计算标头高度,并将其应用为顶部边距值。