2013-01-14 19 views
0

我一直困住了幾天的問題,我認爲是時候尋求幫助。從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]; 
+0

你可以在你的問題中增加額外的代碼。 – foundry

+0

這不是原因,但'internal = NULL'更好,因爲'internal = nil' http://stackoverflow.com/questions/557582/null-vs-nil-in-objective-c – foundry

+0

@nihilvex,don不要使用Quote按鈕來格式化代碼。改爲使用代碼按鈕'{}'。 – Anna

回答

0

我明白了。在我創建BonusObject的ViewController.m中,我必須將該對象的委託設置爲self。

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

我的觀點的delegate設置爲self,而不是對象本身。 現在工作就像一個魅力。感謝大家!

2

(padX < bonusX && bonusX < padX)將永遠失敗

+0

哈哈真的,我發佈時刪除了一個值。實際代碼是padX nihilvex