我一直困住了幾天的問題,我認爲是時候尋求幫助。從superview轉換點時代表不工作當轉換點從superview
我有一個UIView類「BonusObjects」,它被設置爲委託給ViewController。
我在這個類中添加了一些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;
}
但它的工作原理,如果我把它拿出來了,如果的,或將bonusX更改爲不從超級視圖中獲取的某個隨機值。
如果工作正常,其他一切都會消失 - 它會刪除圖像並顯示正確的.tag值。
如果需要,我可以提供更多的代碼。
編輯:委託是在if
(null)
,但它的外面是<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];
你可以在你的問題中增加額外的代碼。 – foundry
這不是原因,但'internal = NULL'更好,因爲'internal = nil' http://stackoverflow.com/questions/557582/null-vs-nil-in-objective-c – foundry
@nihilvex,don不要使用Quote按鈕來格式化代碼。改爲使用代碼按鈕'{}'。 – Anna