0

私は数日間問題に悩まされてきました、そして私は助けを求める時が来たと思います。

ViewControllerへのデリゲートとして設定されているUIViewクラス「BonusObjects」があります。

このクラスにいくつかのUIImageViewを追加し、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で、そのオブジェクトのデリゲートを自分自身に設定する必要がありました。

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

delegateビューのをに設定してselfいましたが、オブジェクト自体には設定していませんでした。今では魅力のように機能します。みんな、ありがとう!

于 2013-01-15T09:17:28.963 に答える