iOS:框架放置不正确

时间:2012-03-29 04:40:03

标签: iphone ios ipad uitableview ios5

这是一段代码,目前让我疯了。它是一个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) 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)

在longpress之后,这个框架(682,0,341,768)甚至看不到表格: The table is not even seen for this frame (682, 0, 341, 768) after the longpress

非常感谢任何帮助!

2 个答案:

答案 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];