开发者

Show bounding box of UIImageView in UIView

I have written a class extending UIImageView in order to allow me dynamically generate bricks on screen. The brick is a 20x10 PNG.

Here is my codes:

- (id) initBrick:(NSInteger *)str x:(float)ptX y:(float)ptY {
int brickIndex = arc4random() % 10 + 1;
NSString *filename = [NSString stringWithFormat:@"brick%d.png", brickIndex];

UIImage *brickImage = [UIImage imageNamed:filename];
CGRect imageRect = CGRectMake(0.0f, 0.0f, 20.0f, 10.0f);
[self initWithFrame:imageRect];
[self setImage:brickImage];
self.center = CGPointMake(ptX, ptY);
self.opaque = YES;
self.isDead = NO;
return self;
} 

Then, I have a simple collision detection function in the same class:

- (BOOL)checkHit:(CGRect)frame {
if(CGRectIntersectsRect(self.frame, frame)) {
    isDead = YES;
  开发者_开发百科  return YES;
} else {
    return NO;
}

}

But the collision detection is not performed well. The bounding box seems a bit lower than my image. How to show the bounding box in order to allow me to check the collision?

If the code is unclear, I can supply more information.


You could set the background color to be sure the problem is not caused by the image. But if the image is simple opaque rectangle, it should be fine. I’d set a breakpoint in the checkHit method, see what self.frame gives and think for a while, it can’t be too hard.

And as for the checkHit method, you should either rename it to checkAndSetHit, or (better) do not set the dead flag there:

- (BOOL) checkHit: (CGRect) frame
{
    return CGRectIntersectsRect(self.frame, frame);
}

The code would read even a tiny little bit better if you renamed it to hitsFrame or intersectsFrame, but that’s nitpicking.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜