两张图片碰撞,声明问题

时间:2011-06-28 09:44:52

标签: iphone xcode methods uiimageview collision-detection

我有一个图像“imageView”的方法:

- (void)createNewImageView {
// Get the view's frame to make it easier later on


UIImage *image = [UIImage imageNamed:@"abouffer_03.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];


// Add it at a random point
[imageView setCenter:[self randomPointSquare]];
[[self view] addSubview:imageView];


// Animate it into place
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:8.0f];
[imageView setCenter:CGPointMake(240, 160)];
[UIView commitAnimations];
 [imageView release];

}

和另一个图像“viewToRotate”(在.h和界面构建器中定义的IBOuutlet)

我想用这种方法检查碰撞:

- (void)myRunloop
{
 // check collision

 if( CGRectIntersectsRect(imageView.frame, viewToRotate.frame) )
 {
    viewToRotate.alpha=0.2;
 }
}

但是xcode总是给我错误:“imageView unclared”我不知道如何解决这个问题。我不想在这种方法中再次定义它。

4 个答案:

答案 0 :(得分:0)

在接口(.h文件)中声明如下

UIImageView *imageView;

并在您的createNewImageView()方法中。使用

imageView = [[UIImageView alloc] initWithImage:image];

答案 1 :(得分:0)

imageView是函数createNewImageView的局部变量,因此myRunloop无法访问

如果您已将imageView声明为IBOutlet 你可以像这样设置图像

UIImage *image = [UIImage imageNamed:@"abouffer_03.png"];
imageView.image = image

答案 2 :(得分:0)

您可以为图像视图指定标签,以便稍后在其他方法中找到它:

[imageView setTag:1];

// in myRunloop
UIImageView* imageView = [[self view] viewWithTag:1];

答案 3 :(得分:0)

当你在线上设置imageView的框架

时,我实际上遇到了类似的问题
   [imageView setCenter:CGPointMake(240, 160)];   

imageView在内存中的那一点得到了解决,只是由于处于动画块中,它显示了imageView被移动到目的地的过渡,但实际上视图的坐标被分配了目标位置,你可以通过在代码行之后记录坐标来确认它。如果您真的需要以类似的方式执行此操作,则可以使用计时器而不是动画块并自行设置动画。但是我通过使用animationDelegate来解决这个问题。只需将动画委托设置为self并定义animationDidStopSelector就可以了。你的animationDidstopSelector会在动画结束时被触发,因此对象到达它的最终目的地,或者你可以说有碰撞(在UI上)。希望有所帮助 这是一个代码示例:

- (void)createNewImageView {
// Get the view's frame to make it easier later on


UIImage *image = [UIImage imageNamed:@"abouffer_03.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];


// Add it at a random point
[imageView setCenter:[self randomPointSquare]];
[[self view] addSubview:imageView];


// Animate it into place
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:)];
[UIView setAnimationDuration:8.0f];
[imageView setCenter:CGPointMake(240, 160)];
[UIView commitAnimations];
[imageView release];

} 

你的animationDidStopSelector就像:

-(void)animationDidStop:(id)sender {  
      //This is almost similar to collision detection, you can do something here 
}