Sau nhiều thử nghiệm ở đây là cách tôi làm cho nó hoạt động cho những gì tôi muốn. Đây là những gì tôi đã cố gắng. - Tôi có một cái nhìn với một hình ảnh. và tôi muốn có hình ảnh ở chế độ toàn màn hình. - Tôi cũng có bộ điều khiển điều hướng với tabBar. Vì vậy, tôi cần phải che giấu điều đó quá. - Ngoài ra, yêu cầu chính của tôi không chỉ là che giấu, mà còn có hiệu ứng mờ dần trong khi hiển thị và ẩn.
Đây là cách tôi làm cho nó hoạt động.
Bước 1 - Tôi có một hình ảnh và người dùng chạm vào hình ảnh đó một lần. Tôi chụp cử chỉ đó và đẩy nó vào cái mới imageViewController
, trong đó imageViewController
, tôi muốn có hình ảnh toàn màn hình.
- (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];
}
Bước 2 - Tất cả các bước dưới đây đều có trong ImageViewControll
Bước 2.1 - Trong ViewDidLoad, hiển thị navBar
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSLog(@"viewDidLoad");
[[self navigationController] setNavigationBarHidden:NO animated:YES];
}
Bước 2.2 - Vào viewDidAppear
, thiết lập tác vụ hẹn giờ với độ trễ (Tôi đã đặt nó cho độ trễ 1 giây). Và sau khi trì hoãn, thêm hiệu ứng mờ dần. Tôi đang sử dụng alpha để sử dụng fading.
- (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.
}
Bước 2.3 - Dưới viewWillAppear
, thêm cử chỉ SingleTap vào hình ảnh và làm mờ navBar.
- (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];
}
Bước 3 - Cuối cùng viewWillDisappear
, đảm bảo đặt lại tất cả mọi thứ
- (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];
}