कई परीक्षणों के बाद यहाँ है कि मैं इसे कैसे काम करना चाहता था। यही मैं कोशिश कर रहा था। - मैं एक छवि के साथ एक दृश्य है। और मैं छवि को पूर्ण स्क्रीन पर लाना चाहता था। - मेरे पास टैबबार के साथ एक नेविगेशन नियंत्रक भी है। इसलिए मुझे उसे भी छिपाने की जरूरत है। - इसके अलावा, मेरी मुख्य आवश्यकता सिर्फ छिपाना नहीं था, बल्कि दिखाते और छिपते समय एक लुप्त होती प्रभाव भी था।
यह है कि मैं इसे कैसे काम कर रहा हूं।
चरण 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 में, नावबार दिखाएं
- (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
, इमेज में सिंगलटैप जेस्चर जोड़ें और नेवर ट्रांसलेंट करें।
- (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];
}