我有一个图像“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”我不知道如何解决这个问题。我不想在这种方法中再次定义它。
答案 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
}