2011-07-17 36 views
1

这应该很容易。在方法中保留变量

我有一种方法来上下移动视图,同时这样做,我上下移动一个UIButton ...然后再次将该按钮移回原始位置。

我想我可以用float float 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工作得很好......谢谢 –