0

我被一个问题困扰了几天,我认为是时候寻求帮助了。

我有一个 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];
4

2 回答 2

2

(padX < bonusX && bonusX < padX)总会失败

于 2013-01-14T14:26:19.413 回答
0

我得到了它。在我创建 BonusObject 的 ViewController.m 中,我必须将该对象的委托设置为 self。

BonusObjects *newObj = [[BonusObjects alloc] initWithFrame:objRect];
        newObj.delegate=self;
        [self.view addSubview:newObj];

delegate将视图的 设置为self,但不是对象本身。现在就像一个魅力。谢谢大家!

于 2013-01-15T09:17:28.963 回答