Сохранить переменную в методе - PullRequest
1 голос
/ 18 июля 2011

Это должно быть легко.

У меня есть метод для перемещения вида вверх и вниз, и при этом я перемещаю UIButton вверх и вниз ... затем возвращаю кнопку в исходное положениекогда метод запускается снова.

Я думал, что смогу получить исходное положение кнопки с помощью 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];

}

Бонус, если вы можете сказать мне, как поставитьцентр представления в значении x в CGPoint.

1 Ответ

1 голос
/ 18 июля 2011

Вы можете использовать статическую переменную для сохранения ее содержимого между вызовами методов. Однако инициализатор должен быть постоянным, поэтому вы не можете вызвать метод для его инициализации. Что вы можете сделать, так это сделать начальное значение недействительным и проверить его перед установкой переменной.

-(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;
    }
    ...

Бонус, если вы можете сказать мне, как поместить центр вида в значение x в CGPoint.

Я не уверен, что вы имели в виду под этим. Если вы хотите установить только координату x центра, вам нужно получить текущий центр, изменить координату x и сохранить новую точку.

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