-2

在我的程序中,我在滑动动画时设置了替换图像

cate 1.png -> cate2.png->cate3.png->cate1.png-> ~

并使用 setframe 设置更改标签的框架。

-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
  int offsetx=(int)scrollView.contentOffset.x;

if(offsetx>0 && offsetx<20)
{

    UIImage * image=[UIImage imageNamed:@"cate1.png"];  
    cateImageview.image=image;

    UIFont * font=[UIFont systemFontOfSize:14];
    [gameLabel setFont:font];

    [gameLabel setFrame:CGRectMake(140,18,50,50)];


    return ;

}

 if(offsetx>20 && offsetx<40)
{

    UIImage * image=[UIImage imageNamed:@"cate2.png"];  
    cateImageview.image=image;

    [gameLabel setFrame:CGRectMake(122,16,50,50)];

    return ;

}
    if(offsetx>40 && offsetx<60)
    {

        UIImage * image=[UIImage imageNamed:@"cate3.png"];  
        cateImageview.image=image;

        [gameLabel setFrame:CGRectMake(113,14,50,50)];

        return ;

    }

    if( offsetx>60 && offsetx<80)
    { 
        UIImage * image=[UIImage imageNamed:@"cate1.png"];  
        cateImageview.image=image;

        [gameLabel setFrame:CGRectMake(103,12,50,50)];

        return ;

    }

   if( offsetx>80 && offsetx<100)
   {

    UIImage * image=[UIImage imageNamed:@"cate2.png"];  
    cateImageview.image=image;

    [gameLabel setFrame:CGRectMake(92,10,50,50)];

       return ;

   }

   if( offsetx>100 && offsetx<120)
   {

    UIImage * image=[UIImage imageNamed:@"cate3.png"];  
    cateImageview.image=image;

    [gameLabel setFrame:CGRectMake(83,8,50,50)];

       return ;

   }

      .
      .
      .

 if(offsetx >820 && offset <840)
      .
      .
 }
  1. 使用替换图像方式进行动画有问题吗?我想知道更好的方法。

  2. 使用标签的框架方式进行动画有问题吗?我想知道更好的方法。

  3. label.frame=CGRectMake(~,~,~,~) vs [label setFrame:CGReckMake(~,~,~,~)] 有区别吗?什么?

4

1 回答 1

0

1. 动画图像

您不能使用 image 属性为更改图像设置动画。如果您想在一个和另一个之间淡化图像,您可以在同一帧上添加第二个 imageView,在您的 imageView 上方并将其不透明度从 0 设置为 1。然后当动画完成时,删除旧的 imageView 或更改图像并删除动画图像视图。

2.动画帧

框架是一个动画属性,但简单地设置一个新值不会导致动画。使用框架进行动画处理没有问题。查看 UIView 动画以获得像这样的简单动画:

[UIView animateWithDuration:yourDurationInSeconds animations:^{
    // Changing the frame in here will cause the frame to animate over the specified duration
    [label setFrame:yourNewFrame];
}];

3. 点符号与否

label.frame = ...;并且[label setFrame:...];是完全相同的东西。只是两种不同的代码编写方式。

于 2012-05-12T09:28:49.660 回答