私は数日間問題に悩まされてきました、そして私は助けを求める時が来たと思います。
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];