2011-07-17 8 views
1

これは簡単です。メソッド内の変数を保存する

私はビューを上下に移動する方法があります。その間、UIButtonを上下に動かしてから、メソッドが再び実行されるときにボタンを元の位置に戻します。

私はフロートで元の位置を得ることができたと思ったoriginalCenterX = topSubmitButton.center.xとfloat originalCenterY = topSubmitButton.center.yもちろん、メソッドのヒット時にボタンの中央で上書きされます二回目。

メソッドの複数の反復で変数を保存するにはどうすればよいですか?

-(IBAction)scrollForComment { 

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.5]; 

CGRect rect = self.view.frame; 

NSLog(@"button center x = %f y = %f",topSubmitButton.center.x,topSubmitButton.center.y); 
float originalCenterX = topSubmitButton.center.x; 
float originalCenterY = topSubmitButton.center.y; 

if (commentViewUp) { 
    rect.origin.y = self.view.frame.origin.y + 80;// move down view by 80 pixels 
    commentViewUp = NO; 

    CGPoint newCenter = CGPointMake(57.0f , 73.0f); // better to calculate this if you are going to rotate to landscape 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5f]; 
    topSubmitButton.center = newCenter; 
    [UIView commitAnimations]; 

} else { // toggling the view's location 
    rect.origin.y = self.view.frame.origin.y - 80;// move view back up 80 pixels 
    commentViewUp = YES; 


    CGPoint newCenter = CGPointMake(160 , 74.0f + topSubmitButton.center.y);// would like to calculate center 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5f]; 
    topSubmitButton.center = newCenter; 
    [UIView commitAnimations]; 
    } 

self.view.frame = rect; 

[UIView commitAnimations]; 

} 

ボーナスはCGPointのx値にビューの中心を置く方法を教えてもらうことができます。

+0

メンバー変数またはグローバル変数(メンバー関数またはグローバル関数があるかどうかによって異なります)に値を格納したいと思っています。私はObjective-Cを本当に知らないので、答えとして投稿しません。 –

+0

また、幅を2で割って四角形の左辺のxオフセットに加算することで、任意の種類の矩形の「中央」を得ることができます(たとえば、いくつかの単位右の方へ)。 –

答えて

1

静的変数を使用すると、メソッド呼び出しの間に内容を保持できます。ただし、イニシャライザは定数である必要があります。したがって、イニシャライザを初期化するメソッドを呼び出すことはできません。あなたができることは初期値を無効にし、変数を設定する前にこれをテストすることです。

-(IBAction)scrollForComment { 
    static float originalCenterX = −1, originalCenterY = −1; // Assuming −1 would be an invalid value 
    if(originalCenterX == −1 && originalCenterY == −1) { 
     CGPoint temp = topSubmitButton.center; 
     originalCenterX = temp.x; 
     originalCenterY = temp.y; 
    } 
    ... 

ボーナス、あなたはどのようにするCGPointのx値にビューの中心を置くために私に言うことができるかどうか。

あなたはこれが何を意味するかわかりません。中心のx座標のみを設定できるようにするには、現在の中心を取得し、x座標を変更して新しいポイントを保存する必要があります。

CGPoint temp = topSubmitButton.center; 
temp.x = newXValue; 
topSubmitButton.center = temp; 
+0

ありがとうございます。 「CGPointのx値にビューの中心を置く」とは、これは無効であることを意味します。CGPoint newCenter = CGPointMake(self.view.frame center、73.0f); "悪いレシーバタイプ 'CGRect'。UIButtonを画面の中央に移動していますが、現在は160を使用していますが、動作しませんが、回転できない場合は機能しません。 –

+1

@Michael CGPoint newCenter = CGPointMake(self.view.center.x、73.0f) 'また、フレームの幅の半分をそのx座標に加えることができますCGPoint newCenter = CGPointMake(self.view.frame.origin.x + self.view.frame.size.width/2、73.0f) '。 – ughoavgfhw

+0

self.view.center.xが処理しました...ありがとう –

関連する問題