从superview转换点时代表不工作

时间:2013-01-14 14:06:22

标签: ios objective-c

我已经陷入困境几天了,我认为是时候寻求帮助了。

我有一个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}}

2 个答案:

答案 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,但不是对象本身。 现在就像一个魅力。谢谢大家!