我被一个问题困扰了几天,我认为是时候寻求帮助了。
我有一个 UIView 类“BonusObjects”,它被设置为 ViewController 的委托。
我在这个类中添加了一些 UIImageViews,开始使用 NSTimer 将它们移向屏幕边缘,并尝试查看它们是否与 ViewController.m 中的 UIImageView 相交。我将目标对象的坐标作为 int 获取,并检查 BonusObjects 中图像的 X 和 Y 是否在目标附近。
由于来自 BonusObject 的图像具有 X=0,我必须从超级视图转换它们的坐标。像那样:
CGPoint newPoint = [[self superview]convertPoint:internal.center
fromView:[internal superview]];
bonusX= newPoint.x;
这是实际的问题if
:为什么委托在此语句中不起作用:
if (padX < bonusX && bonusX < padX+40 && padY <= internal.frame.origin.y) {
[[self delegate] bonusEffect:internal.tag];
[internal removeFromSuperview];
internal=NULL;
}
但是如果我把它从 if 中去掉,或者将 bonusX 更改为某个不是从超级视图中获取的随机值,它就会起作用。
如果工作正常,其他所有内容 - 它会删除图像,并显示正确的 .tag 值。
如果需要,我可以提供更多代码。
编辑: 代表(null)
在其中if
,但在它之外<ViewController: 0xc03e600>
。
EDIT2:这是我设置委托的方式:
在 BonusObjects.h
@protocol BonusDelegate
-(void)bonusEffect:(int)effect;
@end
@interface BonusObjects : UIView <UIApplicationDelegate> {
id <BonusDelegate> delegate;
} @property (nonatomic) id <BonusDelegate> delegate;
在 ViewController.h 中:
#import "BonusObjects.h"
@interface ViewController : UIViewController <BonusDelegate, ADBannerViewDelegate> {
BonusObject *bonusView;
}
在 ViewController.m 中:
bonusView = [[BonusObjects alloc] init];
[bonusView setDelegate:self];