2011-07-13 49 views
1

我在我正在處理的nib文件中有一個UIView控件。在那個UIView中,我可以放置其他的nib文件。當iPad旋轉時,-(void)deviceOrientationChanged:(NSNotification *)note{方法得到執行,並根據iPad進入橫向模式或縱向模式調整UIView的大小。在子類(UIView控件中的nib文件)中,我需要知道iPad是否也會採用縱向模式或縱向模式。波紋管是展示了包含一個UIView控制筆尖文件和包含另一個筆尖文件的UIView控制一個圖:當UIView幀改變大小時執行方法iPhone iPad

enter image description here

綠色矩形是一個UIView控制和內部我已經放置在另一個XIB文件。

因此,我放置了相同的代表- (void)deviceOrientationChanged:(NSNotification *)note{。當我這樣做時的問題是,有時子視圖委託get被執行,而另一個委託不被執行。這隻發生在真實的iPad上,而不是在模擬器中。如果iPad進入橫向模式,我希望兩個代表都可以執行。大多數情況下,這不是問題,但如果我將iPad傾斜一點,只有一個代表會被執行。這就是爲什麼當我調整框架大小時調用子類中的方法的原因。另外我知道我可以從綠色筆尖文件調用一個方法,但這就像一個幻燈片演示文稿,其中有大約60張幻燈片,因此我只是改變視圖的dinamicaly。在C#中,我將能夠使用反射來調用動態數據類型的方法。我不知道iPhone是否有類似的東西。

簡而言之,我希望能夠在同一時間執行同樣的任務(來自我正在使用的NIB文件和UIVIEW控件的子視圖中的一個)。

回答

0
BOOL myBool; 

// this function get's called when the orientation of the ipad changes 
- (void)deviceOrientationChanged2:(NSNotification *)note{ 

    // do not call this method untill other method finish executing it... 
    if(myBool==YES) 
     return; 

    myBool=YES; 


    // wait half a second then call handlerTimer method 
    NSTimer *timer; 
    timer = [NSTimer scheduledTimerWithTimeInterval: (.5) 
              target: self 
              selector: @selector(handleTimer:) 
              userInfo: nil 
              repeats: NO]; 
} 

-(void) handleTimer:(NSTimer*)theTimer{ 

    // this method just uses a diferent image on landscape mode compared to portrait mode 


    // if the image is in landscapemode for example and it is the one for landscape then don't change its alpha the image will not be changed 
    if((imgTextbox.image == [UIImage imageNamed:@"introPaswordVertical.png"] && [super view].frame.size.width>800) || (imgTextbox.image == [UIImage imageNamed:@"introPasswordHorizontal.png"] && [super view].frame.size.width<800)) 
    { 
     imgTextbox.alpha = 0; 
    } 


    // if the super view is in portrait mode then place the vertical image 
    if([super view].frame.size.width<800) 
    { 
     imgTextbox.image = [UIImage imageNamed:@"introPaswordVertical.png"]; 
    } 
    else // otherwise place the otherone 
    { 
     imgTextbox.image = [UIImage imageNamed:@"introPasswordHorizontal.png"]; 

    } 

    // animate the image 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.55]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
    imgTextbox.alpha = 1; 
    [UIView commitAnimations]; 

    myBool=NO; // enable deviceOrientationChanged2 to be called again 
}