这是一段代码,目前让我疯了。它是一个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;
这是longpressing的动作方法: if(!(sender.state == UIGestureRecognizerStateBegan)) 返回;
if([playerLayer3 isHidden])
{
[playerLayer3 setHidden:NO];
[table3 setHidden:YES];
}
else
{
[playerLayer3 setHidden:YES];
[table3 setHidden:NO];
}
请注意,我为表和电影提供了相同的frame
值。但我把它们放在屏幕的不同区域!有人可以指导我出了什么问题吗?
以下是一些截图:
电影,在长期之前,在预期位置(341,0,341,768)
在长按之后,桌子在这里(在一个意外的位置)尽管有相同的帧值作为电影(341,0,341,768)
现在,如果我为电影设置了新的帧值(682,0,341,768):
在longpress之后,这个框架(682,0,341,768)甚至看不到表格:
非常感谢任何帮助!
答案 0 :(得分:2)
框架就其超级视图而言。您已将playerview3添加到self.view,将table3添加到playerview3。
如果要保持框架相同,则应将表格添加到self.view中。这意味着
[playerView3 addSubview:table3];
上面的应该用
更改[self.view addSubview:table3];
如果你想将table3添加到playerView3,那么它的框架应该以0,0而不是682,0开始。
希望它会有所帮助。
答案 1 :(得分:1)
tableview是playerview的子视图,因此它的框架基于playerview的框架。要使它们出现在同一空间中,您需要将tableview添加为self.view的子视图或手动调整框架。
[self.view addSubview:table3];