2011-09-10 17 views
12

ठीक है, मैं एक सबव्यूव के रूप में UIImageView जोड़ना चाहता हूं और फिर स्पलैश स्क्रीन के तरीके में कुछ सेकंड के बाद इसे हटा देना चाहता हूं। मुझे ऐसा करने के लिए तीन अलग-अलग दृष्टिकोण मिलते हैं लेकिन मैं समझ नहीं पा रहा हूं कि उद्देश्य-सी और ऐप्पल के अनुसार कौन सा सबसे अच्छा तरीका है।आईओएस - एक सबव्यू प्रोग्रामिंग

1) द्वितीय कार्य में मेरी MyAppDelegate.h

@interface MyAppDelegate : NSObject <UIApplicationDelegate> { 

    MyViewController *myViewController; 
    UIImageView *myImageView; 
} 


@property (nonatomic, retain) IBOutlet MyViewController *myViewController; 
@property (nonatomic, retain) IBOutlet UIWindow *window; 

@end 

और में MyAppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    myImageView =[[UIImageView alloc] initWithFrame:CGRectMake(0.0,0.0,self.window.frame.size.width,self.window.frame.size.height)]; 

     myImageView.image=[UIImage imageNamed:@"Yoga.png"]; 


    [self.window addSubview:myImageView ]; 
    [self.window bringSubviewToFront:myImageView]; 

    [self performSelector:@selector(removeImage) withObject:nil afterDelay:2.5]; 

    return YES; 
} 

-(void) removeImage 
{ 
    [myImageView removeFromSuperview]; 

    [myImageView release]; 

    [self.window addSubview:myViewController.view]; 
    [self.window makeKeyAndVisible]; 
} 

2) में:

नीचे तीन अलग अलग दृष्टिकोण हैं

In my MyAppDelegate.h 


@interface MyAppDelegate : NSObject <UIApplicationDelegate> { 

    MyViewController *myViewController; 
    UIImageView *myImageView; 
} 

@property (nonatomic, retain) IBOutlet UIImageView *myImageView; 

@property (nonatomic, retain) IBOutlet MyViewController *myViewController; 
@property (nonatomic, retain) IBOutlet UIWindow *window; 

@end 

और MyAppDelegate.m

@Iynthesize myImageView;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    myImageView =[[UIImageView alloc] initWithFrame:CGRectMake(0.0,0.0,self.window.frame.size.width,self.window.frame.size.height)]; 

     myImageView.image=[UIImage imageNamed:@"Yoga.png"]; 


    [self.window addSubview:myImageView ]; 
    [self.window bringSubviewToFront:myImageView]; 

    [self performSelector:@selector(removeImage) withObject:nil afterDelay:2.5]; 

    return YES; 
} 

-(void) removeImage 
{ 
    [myImageView removeFromSuperview]; 

    [myImageView release]; 

    [self.window addSubview:myViewController.view]; 
    [self.window makeKeyAndVisible]; 
} 

- (void)dealloc 
{ 
    [myViewController release]; 
    [myImageView release]; 
} 

3) तीसरे दृष्टिकोण में:

In my MyAppDelegate.h 


@interface MyAppDelegate : NSObject <UIApplicationDelegate> { 

    MyViewController *myViewController; 

} 

@property (nonatomic, retain) IBOutlet MyViewController *myViewController; 
@property (nonatomic, retain) IBOutlet UIWindow *window; 

@end 

और MyAppDelegate.m में

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UIImageView *myImageView =[[UIImageView alloc] initWithFrame:CGRectMake(0.0,0.0,self.window.frame.size.width,self.window.frame.size.height)]; 

    myImageView.image=[UIImage imageNamed:@"Yoga.png"]; 
    myImageView.tag=22;  

    [self.window addSubview:myImageView ]; 

    [myImageView release]; 

    [self.window bringSubviewToFront:myImageView]; 

    [self performSelector:@selector(removeImage) withObject:nil afterDelay:2.5]; 

    return YES; 
} 

-(void) removeImage 
{ 

    for (UIView *subview in [self.view subviews]) { 

    if (subview.tag == 22){ 

     [subview removeFromSuperview]; 

    } 

} 
    [self.window addSubview:myViewController.view]; 
    [self.window makeKeyAndVisible]; 
} 

- (void)dealloc 
{ 
    [myViewController release]; 

} 

तो योग करने के लिए .. पहले दृष्टिकोण UIImage के लिए एक संपत्ति का उपयोग नहीं करता केवल एक चर, दूसरा एक संपत्ति का उपयोग करता है और तीसरा व्यक्ति सिर्फ यूआईएममेज बनाता है और इसे एक सबव्यूव के रूप में जोड़ता है और फिर इसे अपने टैग के आधार पर हटा देता है ..

का पालन करने का सही दृष्टिकोण कौन सा है .. मेरा मानना ​​है कि सभी तीन विकल्प सही हैं .. लेकिन क्या मुझे कोई निश्चित तरीका है जिसका पालन करना चाहिए। क्या इनमें से कोई भी विकल्प स्मृति और प्रदर्शन के मामले में बेहतर है?

अग्रिम धन्यवाद,

एंड्रियास

+1

तकनीकी सवाल छप स्क्रीन कि कृत्रिम उपयोगकर्ता का उपयोग करने के लिए आपके आवेदन गरीब मोबाइल डिजाइन है और क्या iPhone एचआईजी ने सुझाव दिया है नहीं है हो रही देरी के बाद (आप QuartzCore ढांचा साथ जोड़ने की आवश्यकता)। – Nick

+3

सवाल स्प्लैश स्क्रीन के बारे में नहीं है। यह कुछ लागू करने का सही तरीका चुनने के बारे में है ..यह उदाहरण स्प्लैश स्क्रीन के साथ पूरी तरह से अप्रासंगिक कुछ सवाल हो सकता है! यह सबव्यूव जोड़ने और बाद में इसे हटाने का सही तरीका है .. – andreasv

+0

पहला दृष्टिकोण सही लगता है लेकिन आपको अपने UIImageView को प्रारंभ करने की आवश्यकता नहीं है क्योंकि यह एक आउटलेट है, बस उस देरी के समय विधि को आग लगाना और उसे हटा दें superView से जो आपका दृश्य नियंत्रक हो सकता है –

उत्तर

6

आप छवि फिर से उपयोग करने के लिए नहीं जा रहे हैं, तो यह करने के लिए एक सूचक रखने के लिए कोई जरूरत नहीं है। इसके अलावा, यदि आप IBOutlet का उपयोग करते हैं, तो आपको आईबी में भी दृश्य जोड़ना होगा। इस विशिष्ट उदाहरण में मैं कहूंगा कि विकल्प 3 सबसे अधिक संभावना बनाता है, विशेष रूप से इस विकल्प के साथ आप मानक "व्यू आधारित अनुप्रयोग" टेम्पलेट के साथ शुरू कर सकते हैं और बस छवि दृश्य के बारे में बिट्स जोड़ सकते हैं और बाकी को अकेला छोड़ सकते हैं। हालांकि पसंद 3 का एक अंतिम अवलोकन; खिड़की के लिए 2 संदेश;

[self.window addSubview:myViewController.view]; 

[self.window makeKeyAndVisible]; 

किसी भी विधि के दायरे से बाहर होने के लिए प्रकट होता है। यह संभवतः एक प्रतिलिपि और पेस्ट त्रुटि है, लेकिन ध्यान दें कि उन्हें "didFinishLaunchingWithOptions:"

8

आप दृश्य की परत से जुड़ी एक एनीमेशन का उपयोग कर सकते हैं। नीचे दिया गया कोड दृश्य को फीका करता है - लेकिन इसे हटाने के कई अन्य तरीके हैं। एक तरफ

myImageView.layer.opacity = 0.0; 
// this is the state the view will be in after the animation (e.g. invisible) 

CABasicAnimation *theFade; 

theFade = [CABasicAnimation animationwithKeyPath:@"opacity"]; 
theFade.duration = 10.0; 
theFade.fromValue = [NSNumber numberWithFloat:1.0]; // i.e. visible 
theFade.toValue = [NSNumber numberWithFloat:0.0]; // i.e. invisible 
[myImageView.layer addAnimation:theFade forKey:@"animateOpacity"]; 
संबंधित मुद्दे