1

ユーザーがランドスケープに切り替わったときに別のxibを読み込んでいて、うまくいきましたが、スワイプのイベントが登録されていないことに気付きました。UISwipeGesturesを失うことなくloadNibNamedを呼び出す方法は?

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    if ([self currentlyInLandscapeMode:toInterfaceOrientation]) { 
     [[NSBundle mainBundle] loadNibNamed:@"PhotosLandscape" owner:self options:nil]; 
    }else{ 
     [[NSBundle mainBundle] loadNibNamed:@"PhotosPortrait" owner:self options:nil]; 
    } 
} 

- (BOOL)currentlyInLandscapeMode:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (UIInterfaceOrientationIsLandscape(interfaceOrientation)); 
} 

どのようにxibを切り替えて、以前のビュー/ xibからすべての状態を維持できますか?

UPDATE

既存のオブジェクトをレイアウトするnibファイルを使用することはできません私のIBOutletsはまだ動作が判明したが、私の強打は

+0

は適切二XIBに配線iboutletsです(そうのように)ロードされた後、スワイプイベントを再登録する必要が判明しますか? – TigerCoding

+0

yes - 風景がポートビューのコピーとして開始され、xib内のすべてがビュー自体(xy座標)上の場所を除いて同一です。 –

答えて

2

に登録されていません。 nibファイルはアーカイブされたオブジェクトグラフとして保存されるため、ペン先をロードするときは、NSBundleloadNibNamed:またはUIViewControllerinitWithNibName:のいずれかを使用して、新しいオブジェクトセットがインスタンス化されます。

これを回避する唯一の方法は、オブジェクトの新しいセットをインスタンス化するloadNibNamedを使用し、優れたソリューションではありません、既存のオブジェクトに対してframe Sを設定するために彼らのframeプロパティを使用することです。

0

は、私はちょうど、各ペン先が

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    if ([self currentlyInLandscapeMode:toInterfaceOrientation]) { 
     [[NSBundle mainBundle] loadNibNamed:@"VotePhotosLandscape" owner:self options:nil]; 
    }else{ 
     [[NSBundle mainBundle] loadNibNamed:@"VotePhotosViewController" owner:self options:nil]; 
    } 
    [self wireupSwipeEvents]; 
} 

- (BOOL)currentlyInLandscapeMode:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (UIInterfaceOrientationIsLandscape(interfaceOrientation)); 
} 

- (void)wireupSwipeEvents 
{ 
    UISwipeGestureRecognizer *recognizer; 
    recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)]; 
    [recognizer setDirection:UISwipeGestureRecognizerDirectionLeft]; 
    [[self view] addGestureRecognizer:recognizer]; 
    [recognizer release]; 
} 
関連する問題