2012-03-29 10 views
0

Hier ist ein Stück Code, der mich derzeit verrückt macht. Es ist eine UIView mit einer AVPlayerLayer (als Sublayer) und einem UITableView (als Subview). Langes Drücken auf den Film sollte den Film ausblenden und den Tisch zeigen. Langes Drücken auf dem Tisch sollte wieder den Tisch verstecken und den Film zurück zeigen.iOS: Falsche Frame-Platzierung

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; 

Hier ist die Aktionsmethode für Longpressing: wenn return; ((sender.state == UIGestureRecognizerStateBegan)!)

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

Bitte beachte, dass ich die gleichen frame Werte für gebe sowohl den Tisch und den Film. Aber ich bekomme sie in verschiedenen Bereichen des Bildschirms! Kann mir jemand zeigen, was schief läuft?

Hier einige Screenshots sind:

Der Film, vor dem Longpress auf seiner erwarteten Position von (341, 0, 341, 768) The movie, before the longpress, at its expected location of (341, 0, 341, 768)

Nach dem Longpress ist der Tisch hier (bei eine unerwartete Stelle) trotz gleichen FRAME Wert wie der Film, dAS (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)

Jetzt

, wenn ich einen neuen Rahmen Wert habe (682, 0, 341, 768) für die Film: Now, I am having a new frame value of (682, 0, 341, 768)

Die Tabelle ist nicht einmal für diesen Rahmen zu sehen (682, 0, 341, 768) nach dem Longpress: The table is not even seen for this frame (682, 0, 341, 768) after the longpress

Jede Hilfe wird sehr geschätzt!

Antwort

2

Frames sind in Bezug auf seine Super-View. Sie haben playerview3 zu self.view und table3 zu playerview3 hinzugefügt.

Wenn Sie den Rahmen unverändert lassen möchten, sollten Sie die Tabelle nur zu self.view hinzufügen. Es bedeutet

[playerView3 addSubview:table3]; 

über die Linie sollte mit

[self.view addSubview:table3]; 

geändert werden, und wenn Sie table3 zu playerView3 hinzufügen wollen, dann sollte sein Rahmen mit 0,0 und nicht mit 682,0 starten.

Ich hoffe, es wird helfen.

+0

Darn! Das ist so richtig. Ich hätte * mehr * sehen sollen! Danke vielmals. – Ravi

1

Die Tabellenansicht ist eine Unteransicht der Playeransicht, daher basiert ihr Frame auf dem Frame der Playeransicht. Damit sie im selben Bereich angezeigt werden, müssen Sie entweder die Tabellenansicht als Unteransicht von self.view hinzufügen oder den Rahmen manuell anpassen.

[self.view addSubview:table3]; 
+1

Danke! Apurvs Antwort war vor deiner, also habe ich sie angenommen und deine diktiert. – Ravi

Verwandte Themen