Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 多个动画同时出现问题_Iphone_Arrays_Xcode_Animation_Uiimageview - Fatal编程技术网

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的表示层来确定这个位置,看看我提供的更新代码。