我已经陷入困境几天了,我认为是时候寻求帮助了。
我有一个UIView类“BonusObjects”,它被设置为ViewController的委托。
我在这个类中添加了一些UIImageViews,用NSTimer开始将它们移向屏幕边缘,并尝试查看它们是否与ViewController.m中的UIImageView相交。我将目标对象的坐标作为int,并检查来自BonusObjects的图像的X和Y是否在目标附近。
由于来自BonusObject的图像X = 0,我必须从superview转换它们的坐标。像那样:
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更改为一些未从superview中获取的随机值,它就会起作用。
其他所有内容如果工作正常 - 它会删除图像,并显示正确的.tag值。
如果需要,我可以提供更多代码。
编辑:代理人(null)
中的if
代表<ViewController: 0xc03e600>
,但在@protocol BonusDelegate
-(void)bonusEffect:(int)effect;
@end
@interface BonusObjects : UIView <UIApplicationDelegate> {
id <BonusDelegate> delegate;
} @property (nonatomic) id <BonusDelegate> delegate;
之外,代理人为#import "BonusObjects.h"
@interface ViewController : UIViewController <BonusDelegate, ADBannerViewDelegate> {
BonusObject *bonusView;
}
。
EDIT2 :以下是我设置委托的方式:
in BonusObjects.h
bonusView = [[BonusObjects alloc] init];
[bonusView setDelegate:self];
ViewController.h中的:
{{1}}
在ViewController.m中:
{{1}}
答案 0 :(得分:2)
(padX < bonusX && bonusX < padX)
将永远失败
答案 1 :(得分:0)
我明白了。在我创建BonusObject的ViewController.m中,我必须将该对象的委托设置为self。
BonusObjects *newObj = [[BonusObjects alloc] initWithFrame:objRect];
newObj.delegate=self;
[self.view addSubview:newObj];
我将视图的delegate
设置为self
,但不是对象本身。
现在就像一个魅力。谢谢大家!