iPhone SDK UIScrollView не получает сенсорные события после его перемещения - PullRequest
1 голос
/ 12 апреля 2010

Я создаю подкласс UIScrollView и в начале я заполняю этот ShowsScrollView некоторыми элементами. После заполнения я устанавливаю frame и contentSize для этого ShowsScrollView. Пока все работает нормально, я получаю прикосновения к событиям, прокрутка работает ..

Но после поворота в альбомную ориентацию я меняю координаты x и y фрейма ShowsScrollView, чтобы переместить его из нижнего правого угла в верхний. Затем я изменяю его размер (меняю ширину и высоту фрейма ShowsScrollView) и переупорядочиваю элементы в этом свитке. В конце я устанавливаю новый contentSize. Теперь я получаю событие касания только на первой четверти просмотра прокрутки, прокрутка также работает только на четверти просмотра прокрутки, но прокручивает все элементы в просмотре прокрутки. После всех действий я пишу журнал: NSLog (@ "ViewController: setLandscape закончен: размер:% f, содержание% f:% f,% f", scrollView.frame.size.width, scrollView.frame.size.height, scrollView .contentSize.width, scrollView.contentSize.height);

Значения верны: ViewController: setLandscape закончен: размер: 390.000000, 723.000000, содержимое: 390.000000,950.000000

При повороте назад в портретное положение я перемещаю и изменяю размер всего, и все работает нормально ..

Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 07 августа 2012

Вы должны вывести scrollView перед superView, например:

[self.view bringSubviewToFron:scrollView];
0 голосов
/ 14 мая 2010

У меня возникла та же проблема, и мне удалось заставить ее работать, снова установив размер self.view ПОСЛЕ изменения кадра scrollview. Я не знаю, почему это работает, но это работает.

// Set the view's frame
if (UIDeviceOrientationIsLandscape(toOrientation)) {
 [self.view setSize:CGSizeMake(1024, 724)];
} else {
 [self.view setSize:CGSizeMake(768, 960)];
}

// Set scrollview frame
if (UIInterfaceOrientationIsLandscape(toOrientation)) {
 self.scrollView.frame = CGRectMake(0, 0, 100, 300);
 self.scrollView.contentSize = CGSizeMake(100, 600);
}
else {
 self.scrollView.frame = CGRectMake(0, 0, 300, 100);
 self.scrollView.contentSize = CGSizeMake(600, 100);
}

// Move your content around here

// Set the view's frame again
if (UIDeviceOrientationIsLandscape(toOrientation)) {
 [self.view setSize:CGSizeMake(1024, 724)];
} else {
 [self.view setSize:CGSizeMake(768, 960)];
}
...