动画ImageView被忽略时的持续时间

时间:2013-10-24 12:36:09

标签: ios objective-c uiimageview

我正在尝试动画一系列图像。

图像之间的变化不一定要有动画,但我正在使用动画来控制时间:

-(void)nextImage
{
    [UIView animateWithDuration:0.5 animations:^{
        self.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"myImage%d",index++]];
    }completion:^(BOOL completed){
        if (index < 50)
        {
            [self nextImage];
        }
    }];
}

图像正在变化,但无论我在持续时间内使用什么,它都会忽略时间并尽可能快地进行。

如果我更改了alpha,则会发生同样的情况:

-(void)nextImage
{
    [UIView animateWithDuration:0.5 animations:^{
        self.imageView.alpha = 1 - index++/100
    }completion:^(BOOL completed){
        if (index < 50)
        {
            [self nextImage];
        }
    }];
}

6 个答案:

答案 0 :(得分:3)

只有UIView的某些属性为animatable:

@property frame
@property bounds
@property center
@property transform
@property alpha
@property backgroundColor
@property contentStretch

image的{​​{1}}属性无法设置动画。

如果要更新UIImageView内的图像,请使用其他技术,例如块:

UIImageView

(替代方案:dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{ // update your image }); performSelectorAfterDelay:。我建议使用积木。)

我认为你的alpha动画由于你的部门中的int截断而无效。试试这个:

NSTimer

原始除法的问题在于,两个都是整数的表达式self.imageView.alpha = 1.0f - (float)index++/100.0f; 是作为整数除法执行的。如果a / b&lt; a,结果将是b - 换句话说,所有值的完全透明的Alpha设置。

答案 1 :(得分:2)

由于你已经写了

,因此alpha无效
self.imageView.alpha = 1 - index++/100;

此处的所有内容均为int,因此您的结果只能是整数值,即1或0.请改用:

self.imageView.alpha = 1.0f - index++/100.0f;

编译器可以隐式地将index转换为float,但你可以是显式的并写:

self.imageView.alpha = 1.0f - (CGFloat)(index++)/100.0f;

答案 2 :(得分:1)

使用[UIView animateDuration:animations:completion];无法做到这一点 尝试使用NSTimer并调用每一步更改图像的功能。

答案 3 :(得分:0)

您也可以使用UIImageView动画属性,例如:

// arrayWithImages
arrayPictures = [[NSMutableArray alloc] initWithCapacity:50];

// The name of your images should 
for (int i=0; i<=49; i++) {
    UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"myImage%d.jpg",i]];
    [arrayPictures addObject:image];
}

imageView.animationDuration = 0.5;
imageView.animationImages = arrayPictures;

[imageView startAnimating];

根据图像的数量,您可能会遇到一些内存问题,并且必须使用较低级别的解决方案为图像设置动画。

答案 4 :(得分:0)

如果他们只是动画持续时间问题,那么可能是动画未启用,因为我在我的ios应用程序中遇到了这个问题。这是一个简单的解决方案:

只需要添加[UIView setAnimationsEnabled:YES];在开始动画块之前。所以你的完整代码将是这样的:

-(void)nextImage
{
    [UIView setAnimationsEnabled:YES]
    [UIView animateWithDuration:0.5 animations:^{
        self.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"myImage%d",index++]];
    }completion:^(BOOL completed){
        if (index < 50)
        {
            [self nextImage];
        }
    }];
}

答案 5 :(得分:-1)

为什么不使用ImageView的images属性并设置要设置动画的图像数组?