iOS: неправильное размещение кадра - PullRequest
0 голосов
/ 29 марта 2012

Вот кусок кода, в настоящее время сводящий меня с ума.Это UIView, с AVPlayerLayer (в качестве подслоя) и UITableView (в качестве подпредставления).Долгое нажатие на фильм должно скрыть фильм и показать таблицу.Длинное нажатие на таблицу, опять же, должно скрыть таблицу и показать фильм обратно.

playerView3 = [[UIView alloc] init];
[playerView3 addGestureRecognizer:tap3];
[playerView3 addGestureRecognizer:longPress3];
[playerView3 setFrame:CGRectMake(682, 0, 341, 768)];
[self.view addSubview:playerView3];    

[self table3:CGRectMake(682, 0, 341, 768)];
[playerView3 addSubview:table3];
[table3 setHidden:YES]; 
[table3 setTag:3];

NSURL *url3 = [[NSBundle mainBundle] URLForResource:@"3" withExtension:@"MOV"];
AVURLAsset *asset3 = [AVURLAsset URLAssetWithURL:url3 options:nil];
AVPlayerItem *playerItem3 = [AVPlayerItem playerItemWithAsset:asset3];
player3 = [AVPlayer playerWithPlayerItem:playerItem3];
[player3 setActionAtItemEnd:AVPlayerActionAtItemEndNone];
playerLayer3 = [AVPlayerLayer playerLayerWithPlayer:player3];
[playerView3.layer addSublayer:playerLayer3];
playerLayer3.frame = playerView3.layer.bounds;
playerLayer3.videoGravity = AVLayerVideoGravityResizeAspect;

Вот метод действия для длинного нажатия: if (! (Sender.state == UIGestureRecognizerStateBegan)) return;

if([playerLayer3 isHidden])
{    
    [playerLayer3 setHidden:NO];
    [table3 setHidden:YES];
}
else
{
    [playerLayer3 setHidden:YES];
    [table3 setHidden:NO];
}  

Обратите внимание, что я даю одинаковые значения frame как для таблицы, так и для фильма.Но я получаю их в разных областях экрана!Кто-нибудь может подсказать мне, что идет не так?

Вот несколько скриншотов:

Фильм, перед продолжительным нажатием, в ожидаемом месте (341, 0, 341, 768) The movie, before the longpress, at its expected location of (341, 0, 341, 768)

После долгого нажатия таблица находится здесь (в неожиданном месте), несмотря на то, что она имеет то же значение кадра, что и фильм (341, 0, 341, 768) After the longpress, the table is here (at an unexpected location) DESPITE HAVING THE SAME FRAME VALUE as the movie (341, 0, 341, 768)

Теперь, если яу меня новое значение кадра (682, 0, 341, 768) для фильма: Now, I am having a new frame value of (682, 0, 341, 768)

Таблица даже не видна для этого кадра (682, 0, 341, 768) после долгого нажатия: The table is not even seen for this frame (682, 0, 341, 768) after the longpress

Любая помощь приветствуется!

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Рамки по отношению к ее супер зрения.Вы добавили playerview3 в self.view и table3 в playerview3.

Если вы хотите оставить кадр таким же, вы должны добавить таблицу только в self.view.Это означает, что

[playerView3 addSubview:table3];

строка выше должна быть изменена на

[self.view addSubview:table3];

. Если вы хотите добавить table3 в playerView3, то его кадр должен начинаться с 0,0, а не с 682,0.

Надеюсь, это поможет.

1 голос
/ 29 марта 2012

Представление таблицы - это подпредставление просмотра игрока, поэтому его кадр основан на кадре просмотра игрока. Чтобы они отображались в одном и том же пространстве, вам нужно либо добавить представление таблицы в качестве подпредставления self.view, либо настроить кадр вручную.

[self.view addSubview:table3];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...