IOS получить позицию

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

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(2, 0, 262, 748)];
scrollView.contentSize=CGSizeMake(262, 816);
scrollView.bounces=NO;
scrollView.delaysContentTouches=YES;

buton1 = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
buton1.frame = CGRectMake(2, 0, 262, 102);
buton1.bounds = CGRectMake(2, 0, 262.0, 102.0);
[buton1 setTag:1];
[buton1 setImage:[UIImage imageNamed:@"left_gride.png"] forState:UIControlStateNormal];
[buton1 addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
     [scrollView addSubview:buton1];

и

-(void) buttonClick:(UIButton*)button{
if ([button tag]==1)
{
     NSLog(@"position:%d",buton1.frame.origin.x);
}
else
{
    NSLog(@"position:%d",buton2.frame.origin.y);
}

}

Что не так с моим кодом. Спасибо.

Я также пробовал с:

-(void) buttonClick:(UIButton*)button{
if ([button tag]==1)
{
     NSLog(@"position:%d",buton1.frame.origin.x);
}
else
{
    NSLog(@"position:%d",buton2.frame.origin.y);
}

-(void) buttonClick:(UIButton*)button{
if ([button tag]==1)
{
     NSLog(@"position:%d",button.frame.origin.x);
}
else
{
    NSLog(@"position:%d",button2.frame.origin.y);
}

Но я просто получаю то же самое. Позиция 0;


person flaviusilaghi    schedule 25.03.2011    source источник
comment
Пожалуйста, напишите, что вы ожидали и что произошло, если вы выполните этот код.   -  person GorillaPatch    schedule 25.03.2011
comment
Я ожидал вернуть позицию, и все, что я получаю, это позиция 0.   -  person flaviusilaghi    schedule 25.03.2011


Ответы (2)


Ваш код выглядит нормально. Единственное - вы используете неправильный спецификатор формата в NSLog. Поскольку координаты являются числами с плавающей запятой, вы должны использовать %f вместо %d:

NSLog(@"position:%f",buton1.frame.origin.x);
person Vladimir    schedule 25.03.2011
comment
Теперь у меня другая проблема. Даже если я прокручиваю кнопки, положение не меняется. Почему? - person flaviusilaghi; 25.03.2011
comment
потому что позиция кнопки находится в координатном пространстве содержимого прокрутки, поэтому она фактически не меняется при прокрутке. Если вы хотите получить координаты экрана, вам нужно преобразовать их в них (например, используя метод convertPoint:toView:) - person Vladimir; 25.03.2011

Если вы используете метод scrollRectToVisible:animated:, есть хитрость, потому что в документации говорится: этот метод прокручивает представление содержимого, так что область, определенная rect, просто видна внутри представления прокрутки. Если область уже видна, метод ничего не делает.

Попробуйте прокрутить до CGRectMake(buton1.frame.origin.x, buton1.frame.origin.y, yourScrollView.frame.width, yourScrollView.frame.height).

Вы можете использовать коэффициент выдумки для 3-го параметра.

person NoTTC    schedule 25.03.2011