Nach mehreren Versuchen hier ist, wie ich es für das, was ich wollte, zum Laufen gebracht habe. Das habe ich versucht. - Ich habe eine Ansicht mit einem Bild. und ich wollte, dass das Bild im Vollbildmodus angezeigt wird. - Ich habe auch einen Navigationscontroller mit einer TabBar. Also muss ich das auch verstecken. - Außerdem war meine Hauptanforderung, mich nicht nur zu verstecken, sondern auch beim Ein- und Ausblenden einen verblassenden Effekt zu haben.
So habe ich es zum Laufen gebracht.
Schritt 1 - Ich habe ein Bild und der Benutzer tippt einmal auf dieses Bild. Ich fange diese Geste ein und schiebe sie in das Neue imageViewController, es ist in der imageViewController, ich möchte ein Vollbild haben.
- (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer {
NSLog(@"Single tap");
ImageViewController *imageViewController =
[[ImageViewController alloc] initWithNibName:@"ImageViewController" bundle:nil];
godImageViewController.imgName = // pass the image.
godImageViewController.hidesBottomBarWhenPushed=YES;// This is important to note.
[self.navigationController pushViewController:godImageViewController animated:YES];
// If I remove the line below, then I get this error. [CALayer retain]: message sent to deallocated instance .
// [godImageViewController release];
}
Schritt 2 - Alle folgenden Schritte befinden sich im ImageViewController
Schritt 2.1 - Zeigen Sie in ViewDidLoad die Navigationsleiste an
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSLog(@"viewDidLoad");
[[self navigationController] setNavigationBarHidden:NO animated:YES];
}
Schritt 2.2 - viewDidAppearRichten Sie eine Timer-Task mit Verzögerung ein (ich habe sie auf 1 Sek. Verzögerung eingestellt). Fügen Sie nach der Verzögerung einen Fading-Effekt hinzu. Ich benutze Alpha, um Fading zu verwenden.
- (void)viewDidAppear:(BOOL)animated
{
NSLog(@"viewDidAppear");
myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(fadeScreen) userInfo:nil repeats:NO];
}
- (void)fadeScreen
{
[UIView beginAnimations:nil context:nil]; // begins animation block
[UIView setAnimationDuration:1.95]; // sets animation duration
self.navigationController.navigationBar.alpha = 0.0; // Fades the alpha channel of this view to "0.0" over the animationDuration of "0.75" seconds
[UIView commitAnimations]; // commits the animation block. This Block is done.
}
Schritt 2.3 - viewWillAppearFügen Sie unter SingleTap-Geste zum Bild hinzu und machen Sie die navBar durchscheinend.
- (void) viewWillAppear:(BOOL)animated
{
NSLog(@"viewWillAppear");
NSString *path = [[NSBundle mainBundle] pathForResource:self.imgName ofType:@"png"];
UIImage *theImage = [UIImage imageWithContentsOfFile:path];
self.imgView.image = theImage;
// add tap gestures
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[self.imgView addGestureRecognizer:singleTap];
[singleTap release];
// to make the image go full screen
self.navigationController.navigationBar.translucent=YES;
}
- (void)handleTap:(UIGestureRecognizer *)gestureRecognizer
{
NSLog(@"Handle Single tap");
[self finishedFading];
// fade again. You can choose to skip this can add a bool, if you want to fade again when user taps again.
myTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(fadeScreen) userInfo:nil repeats:NO];
}
Schritt 3 - Stellen Sie schließlich viewWillDisappearsicher, dass Sie alle Sachen zurücklegen
- (void)viewWillDisappear: (BOOL)animated
{
self.hidesBottomBarWhenPushed = NO;
self.navigationController.navigationBar.translucent=NO;
if (self.navigationController.topViewController != self)
{
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
[super viewWillDisappear:animated];
}