여러 번의 시험 후 여기에 내가 원하는대로 작동시키는 방법이 있습니다. 이것이 내가 시도한 것입니다. -이미지가 보입니다. 이미지를 전체 화면으로 표시하고 싶었습니다. -tabBar가있는 탐색 컨트롤러도 있습니다. 그래서 나는 그것을 숨길 필요가 있습니다. -또한 내 주요 요구 사항은 숨기는 것이 아니라 보이거나 숨기는 동안 페이딩 효과가 있다는 것입니다.
이것이 내가 작동시키는 방법입니다.
1 단계-이미지가 있고 사용자가 해당 이미지를 한 번 탭합니다. 내가 그 제스처를 캡처하고 새에 밀어 imageViewController
, 그것에서 imageViewController
, 나는 전체 화면 이미지를 갖고 싶어.
- (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];
}
2 단계-아래의 모든 단계는 ImageViewController에 있습니다.
2.1 단계-ViewDidLoad에서 navBar 표시
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSLog(@"viewDidLoad");
[[self navigationController] setNavigationBarHidden:NO animated:YES];
}
2.2 단계-입력 viewDidAppear
에서 지연으로 타이머 작업을 설정하십시오 (1 초 지연으로 설정했습니다). 그리고 지연 후에 페이딩 효과를 추가하십시오. 알파를 사용하여 페이딩을 사용하고 있습니다.
- (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.
}
2.3 단계-아래 viewWillAppear
에서 이미지에 singleTap 제스처를 추가하고 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];
}
3 단계-마지막으로 viewWillDisappear
모든 내용을 다시 입력해야합니다.
- (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];
}