我正在处理的nib文件中有一个UIView控件。在那个UIView我能够放置其他nib文件。当iPad旋转时,-(void)deviceOrientationChanged:(NSNotification *)note{
方法会被执行,我会根据iPad进入横向或纵向模式调整UIView的大小。在子类(UIView控件中的nib文件)中,我需要知道iPad是否进入了限制模式或纵向模式。 Bellow是一张图片,展示了包含UIView控件的nib文件以及包含另一个nib文件的UIView控件:
绿色矩形是一个UIView控件,在里面我放了另一个xib文件。
所以我放置了同一个委托- (void)deviceOrientationChanged:(NSNotification *)note{
。当我这样做的问题是,有时子视图委托得到执行而另一个代表没有。这只发生在真正的iPad而不是模拟器中。如果iPad进入横向模式,我希望两位代表都能执行。大多数情况下这不是问题,但如果我稍微倾斜iPad,只会有一名代表被执行。这就是为什么我在考虑调整子帧的方法时调整子类的方法。另外我知道我可以从绿色nib文件调用一个方法,但这就像一个powerpoint演示文稿,其中有大约60张幻灯片,因此我只是改变视图的dinamicaly。在c#中,我可以使用反射调用动态数据类型的方法。如果iPhone有类似的东西,我不知道。
简而言之,我希望两位代表(我正在使用的NIB文件中的一个和THE UIVIEW CONTROL的副本)在同一时间执行。
答案 0 :(得分: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
}