2011-08-11 14 views
0

私は自分のテキストフィールドを任意の方向に動かす必要があります。オリエンテーションの問題

しかし、私は風景の右と肖像画の上下を逆さまに問題があります。

私がそれらのいずれかにそれを向けると、私のテキストフィールドは上にならず、上にあるテキストフィールドが上がっています。

私にいくつかの解決策を提案します。

以下は私がオリエンテーションに使用しているコードです。

私はあなたがiPhone開発のniwBieであるようにできるならば、私には完全な手順を提案してください。

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
CGRect textFieldRect=[self.view.window convertRect:textField.bounds fromView:textField]; 
CGRect viewRect=[self.view.window convertRect:self.view.bounds fromView:self.view]; 

CGFloat midLine=textFieldRect.origin.y+0.5*textFieldRect.size.height; 
CGFloat numerator=midLine-viewRect.origin.y-MINIMUM_SCROLL_FRACTION*viewRect.size.height; 
CGFloat denominator=(MAXIMUM_SCROLL_FRACTION-MINIMUM_SCROLL_FRACTION)*viewRect.size.height; 

CGFloat heightFraction=numerator/denominator; 
if(heightFraction < 0.0) 
{ 
    heightFraction=0.0; 
} 
else if(heightFraction > 1.0) 
{ 
    heightFraction=1.0; 
} 

CGRect viewFrame; 
UIInterfaceOrientation orientation=[[UIApplication sharedApplication]statusBarOrientation]; 
//code for text field editing in landscape an portrait mode 

if(orientation==UIInterfaceOrientationPortrait||orientation==UIInterfaceOrientationPortraitUpsideDown) 
{ 
    animatedDistance=floor(PORTRAIT_KEYBOARD_HEIGHT*heightFraction); 
} 
else 
{ 
    animatedDistance=floor(LANDSCAPE_KEYBOARD_HEIGHT*heightFraction); 
} 

if (orientation==UIInterfaceOrientationPortrait) { 
    viewFrame=self.view.frame; 
    viewFrame.origin.y-=animatedDistance; 
} 
else if(orientation==UIInterfaceOrientationPortraitUpsideDown){ 
    viewFrame=self.view.frame; 
    viewFrame.origin.y+=animatedDistance; 
} 
else if(orientation == UIInterfaceOrientationLandscapeRight){ 
    viewFrame=self.view.frame; 
    viewFrame.origin.x+=animatedDistance; 

} 
else if(orientation == UIInterfaceOrientationLandscapeLeft){ 

    viewFrame=self.view.frame; 
    viewFrame.origin.x-=animatedDistance; 
} 

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; 
[self.view setFrame:viewFrame]; 

[UIView commitAnimations]; 
} 

答えて

0

ViewControllerで - willRotateToInterfaceRotation:durationメソッドをオーバーライドします。このメッセージは、ユーザーがデバイスを回転させると呼び出されます。この方法では、すべてのビューを適切な位置に配置するように設定できます。参照で表示ローテーションイベントへの応答を参照してください:UIViewController reference

あなたはこのような何か行うことができます:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
if(toInterfaceOrientation==UIInterfaceOrientationPortraitUpsideDown){ 
     yourView.frame = CGRectMake(x,y,w,h); //and set the proper coordinate for this view in this orientation 
} 

をして、すべてのビューのためにそれを行う

+0

を回転させたときに正しく配置されますが、私はいけないされていないことにどのように私の風景の右と上下のモードで知っている...ビューの下のテキストフィールドはキーボードで覆われている...私は何を書くだろう - willRotateToInterfaceRotation:期間メソッド?...私のコードを見て私を説明してくださいtextFieldDidBeginEditingメソッドの... O_o –

+0

上記を参照してください。私はいくつかのコードを追加しました。 – broch

+0

実際に私のiPhoneアプリケーションでは、上記のコードを使用して、キーボードの上にテキストフィールドを表示するためにビューを上げました。私のアプリケーションは、4つのインターフェイスの向きすべてをサポートしています。私は、次のコードを使用してビューを持ち上げます。ここで問題となるのは、縦向きの場合のみです。 4方向のすべてで正しい持ち上げを実行する方法はありますか –

関連する問題