我正在尝试动画一系列图像。
图像之间的变化不一定要有动画,但我正在使用动画来控制时间:
-(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];
}
}];
}
答案 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
属性并设置要设置动画的图像数组?