Iphone 多个动画同时出现问题
这是我的密码:Iphone 多个动画同时出现问题,iphone,arrays,xcode,animation,uiimageview,Iphone,Arrays,Xcode,Animation,Uiimageview,这是我的密码: -(void) createNewImage { UIImage * image = [UIImage imageNamed:@"abouffer_03.png"]; imageView = [[UIImageView alloc] initWithImage:image]; [imageView setCenter:[self randomPointSquare]]; [imageViewArray addObject:imageView]; [[self view] add
-(void) createNewImage {
UIImage * image = [UIImage imageNamed:@"abouffer_03.png"];
imageView = [[UIImageView alloc] initWithImage:image];
[imageView setCenter:[self randomPointSquare]];
[imageViewArray addObject:imageView];
[[self view] addSubview:imageView];
[imageView release];
}
-(void)moveTheImage{
for(int i=0; i< [imageViewArray count];i++){
UIImageView *imageView = [imageViewArray objectAtIndex:i];
imageView.center = CGPointMake(imageView.center.x + X, imageView.center.y + Y);
}
}
-(void)viewDidLoad {
[super viewDidLoad];
[NSTimer scheduledTimerWithTimeInterval:4 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(onTimer2)];
[displayLink setFrameInterval:1];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
imageViewArray = [[NSMutableArray alloc]init];
}
-(无效)创建新图像{
UIImage*image=[UIImage ImageName:@“aboutfer_03.png”];
imageView=[[UIImageView alloc]initWithImage:image];
[imageView设置中心:[自随机点方形]];
[imageViewArray addObject:imageView];
[[self view]addSubview:imageView];
[图像视图发布];
}
-(无效)移动图像{
对于(int i=0;i<[imageViewArray计数];i++){
UIImageView*imageView=[imageViewArray对象索引:i];
imageView.center=CGPointMake(imageView.center.x+x,imageView.center.y+y);
}
}
-(无效)viewDidLoad{
[超级视图下载];
[NSTimer scheduledTimerWithTimeInterval:4目标:自选择器:@selector(onTimer)userInfo:nil repeats:YES];
displayLink=[CADisplayLink displayLinkWithTarget:自选择器:@selector(onTimer2)];
[displayLink setFrameInterval:1];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop]forMode:NSDefaultRunLoopMode];
imageViewArray=[[NSMutableArray alloc]init];
}
所以我想做的是。
但我的问题是,在创建imageView(createNewImage)后,它会在4秒后停止(可能是由于计时器的原因)。我希望imageView在创建新imageView时继续移动。请问我怎么做?对不起,我的英语是法语:/相反,请保留一个指向您希望所有图像也移动的点的引用。使用NSTimer并在计时器中移动所有图像最终会大大降低应用程序的速度(我从经验中知道)。使用UIView动画块,并在创建它时告诉它移动到该点
-(void) createNewImage {
UIImage * image = [UIImage imageNamed:@"abouffer_03.png"];
imageView = [[[UIImageView alloc] initWithImage:image] autorelease];
[imageView setCenter:[self randomPointSquare]];
//Move to the centerPoint
[self moveTheImage:imageView];
[imageViewArray addObject:imageView];
[[self view] addSubview:imageView];
}
-(void)moveTheImage:(UIImageView *)imageView {
[UIView animateWithDuration:1.0
animations:^{
[imageView setCenter:centerPoint];
}];
}
-(void)viewDidLoad {
[super viewDidLoad];
imageViewArray = [[NSMutableArray alloc]init];
//IDK what all that other code was
centerPoint = self.view.center;
}
编辑:在动画期间查找UIImage
UIImageView *image = [imageViewArray objectAtIndex:0];
CGRect currentFrame = [[[image layer] presentationLayer] frame];
for(UIImageView *otherImage in imageViewArray) {
CGRect objectFrame = [[[otherImage layer] presentationLayer] frame];
if(CGRectIntersectsRect(currentFrame, objectFrame)) {
NSLog(@"OMG, image: %@ intersects object: %@", image, otherImage);
}
}
您需要参考UIImageView的表示层,以在动画期间找到其位置
UIImageView *image = [imageViewArray objectAtIndex:0];
CGRect currentFrame = [[[image layer] presentationLayer] frame];
for(UIImageView *otherImage in imageViewArray) {
CGRect objectFrame = [[[otherImage layer] presentationLayer] frame];
if(CGRectIntersectsRect(currentFrame, objectFrame)) {
NSLog(@"OMG, image: %@ intersects object: %@", image, otherImage);
}
}
你的
onTimer
代码在哪里?没有,我用createNEwImage更改了onTimer,用MoveImage更改了onTimer2。我问你的onTimer
函数中有什么代码。onTimer是createNEwImage。这是一个错误,因为对于UIView动画块,不可能使用CGRectIntersects进行碰撞,因此系统只知道起点和终点。这就是为什么我不使用UIView动画“我使用了NSTimer,因为在UIView动画块中,不可能使用CGRectIntersects进行碰撞,所以系统只知道起始点和端点。”这不是真的。你想说的是,你不知道动画中的图片在哪里。您可以使用UIView的表示层来确定这个位置,看看我提供的更新代码。