2013-06-03 40 views
0

最近我在我的应用程序中使用故事板和xibs进行了切割。虽然这样做很容易将图像链接到正确的图像名称。现在我想把它们联系起来,没有那些麻烦。在这里和谷歌搜索相当一段时间没有太大的成功。没有界面生成器的链接图像

这些图像将用于应用程序启动后启动屏幕以防止白色闪光(与IB一起工作完美)。在我的.h文件中,我做到了。

@property (nonatomic, retain) UIImageView *splash4InchPortrait; 

我将如何从图像我有我的应用程序宣告形象的名字说,[email protected]

这是我在这两个文件中都有的。只是想让你知道我在做什么。

.H

@interface CenterViewController : UIViewController <PullToRefreshViewDelegate, UIWebViewDelegate, UIGestureRecognizerDelegate, MTStatusBarOverlayDelegate, UIScrollViewDelegate> 
{ 
    UIWebView *webView; 
    NSTimer *timer; 
    UIScrollView *currentScrollView; 
    MTStatusBarOverlay *overlay; 

} 


@property(nonatomic) UIViewAutoresizing autoresizingMask; 
@property(nonatomic) UIViewAutoresizing bounds; 


@property (nonatomic, retain) UIImageView *splash35InchPortrait; 
@property (nonatomic, retain) UIImageView *splash35InchLandscape; 
@property (nonatomic, retain) UIImageView *splashRetina35InchPortrait; 
@property (nonatomic, retain) UIImageView *splashRetina35InchLandscape; 
@property (nonatomic, retain) UIImageView *splash4InchPortrait; 
@property (nonatomic, retain) UIImageView *splash4InchLandscape; 
@property (nonatomic, retain) UIImageView *splashPadPortrait; 
@property (nonatomic, retain) UIImageView *splashPadLandscape; 

@end 

.M

@interface UIViewController() 
@end 

BOOL isPortraitView = YES; 

@implementation CenterViewController 

@synthesize splash35InchPortrait, splash35InchLandscape, splashRetina35InchPortrait, splashRetina35InchLandscape, splash4InchPortrait, splash4InchLandscape, splashPadPortrait, splashPadLandscape; 



- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 


    webView = [[UIWebView alloc] initWithFrame:CGRectMake(0.f, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
    [self.view setCenter:CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2)]; 
    [(UIWebView*)webView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 

    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.mysite.com"]]]; 

    webView.contentMode = UIViewContentModeScaleToFill; 
    webView.scalesPageToFit = YES; 
    webView.autoresizingMask=(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth); 
    [self.view addSubview:webView]; 

    for (UIView* subView in webView.subviews) { 
     if ([subView isKindOfClass:[UIScrollView class]]) { 
      currentScrollView = (UIScrollView *)subView; 
      currentScrollView.delegate = (id) self; 

     } 
    } 
    webView.scrollView.scrollsToTop = YES; 
    [webView setDelegate:self]; 
    webView.tag = 999; 

    timer = [NSTimer scheduledTimerWithTimeInterval:(1.0/1.0) target:self selector:@selector(tick) userInfo:nil repeats:YES]; 

    [self.navigationController setNavigationBarHidden:YES]; 
    [super viewDidLoad];  
    webView.contentMode = UIViewContentModeScaleAspectFit; 
    webView.autoresizingMask=(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth); 


//get screen size 
    CGRect screenBounds = [[UIScreen mainScreen] bounds]; 
    if (UIDeviceOrientationIsPortrait(self.interfaceOrientation)){ 
     //DO Portrait 
     if (screenBounds.size.height <=480) { 
      //code for 3.5-inch screen 
      splash35InchPortrait.hidden = NO; 
      splash35InchLandscape.hidden = YES; 
      splashRetina35InchPortrait.hidden = YES; 
      splashRetina35InchLandscape.hidden = YES; 
      splash4InchPortrait.hidden = YES; 
      splash4InchLandscape.hidden = YES; 
      splashPadLandscape.hidden = YES; 

     }else{ 
      // code for 3.5 Retina inch screen 
      splash35InchLandscape.hidden = YES; 
      splashRetina35InchPortrait.hidden = NO; 
      splashRetina35InchLandscape.hidden = YES; 
      splash4InchLandscape.hidden = YES; 
      splashPadLandscape.hidden = YES; 
     } 

    }else{ 
     // code for 4-inch screen 
     splash35InchPortrait.hidden = YES; 
     splashRetina35InchPortrait.hidden = YES; 
     splash4InchPortrait.hidden = NO; 
     splash4InchLandscape.hidden = YES; 
     splashPadLandscape.hidden = YES; 
    } 



// Set up Pull to Refresh code 
    PullToRefreshView *pull = [[PullToRefreshView alloc] initWithScrollView:currentScrollView]; 
    [pull setDelegate:self]; 
    pull.tag = 998; 
    [currentScrollView addSubview:pull]; 

//Statusbar Overlay 
    overlay = [MTStatusBarOverlay sharedInstance]; 
    overlay.delegate = self; 
    overlay.progress = 0.0; 
    webView.backgroundColor = [UIColor colorWithWhite:0.1f alpha:1.0f]; 

// Forward/Back Gestures 
    UISwipeGestureRecognizer *goForward = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRightAction:)]; 
    goForward.direction = UISwipeGestureRecognizerDirectionRight; 
    goForward.delegate = self; 
    goForward.numberOfTouchesRequired = 1; 
    [webView addGestureRecognizer:goForward];  

    UISwipeGestureRecognizer *goBack = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeftAction:)]; 
    goBack.direction = UISwipeGestureRecognizerDirectionLeft; 
    goBack.delegate = self; 
    goBack.numberOfTouchesRequired = 1; 
    [webView addGestureRecognizer:goBack]; 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
    return NO; 
} 


//Other Gestures 
- (void)swipeLeftAction:(id)ignored{ 
    [webView goBack]; 
    [overlay postMessage:@"Go Back" duration:1 animated:YES]; 
} 
- (void)swipeRightAction:(id)ignored{ 
    [webView goForward]; 
    [overlay postMessage:@"Go Forward" duration:1 animated:YES]; 
} 
-(void)pullToRefreshViewShouldRefresh:(PullToRefreshView *)view { 
    [(UIWebView *)[self.view viewWithTag:999] reload]; 
    [overlay postMessage:@"Reloading" duration:1 animated:YES]; 
} 



//Webview Start/Finish Request 

- (void)webViewDidStartLoad:(UIWebView *)webView { 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
} 


- (void)webViewDidFinishLoad:(UIWebView *)webview { 
#define IS_IPHONE (!IS_IPAD) 
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone) 

    bool isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136)); 
    if (isiPhone5) { 
     // Loading iPhone 5 
     [(PullToRefreshView *)[self.view viewWithTag:998] finishedLoading]; 
     [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
     NSLog(@"didFinish: %@; stillLoading:%@", [[webView request]URL], 
       ([email protected]"NO":@"YES")); 
    } 

    else if (IS_IPAD) { 
     // Loading IPAD 
     [(PullToRefreshView *)[self.view viewWithTag:998] finishedLoading]; 
     [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
     NSLog(@"didFinish: %@; stillLoading:%@", [[webView request]URL], 
       ([email protected]"NO":@"YES")); 
    } 

    else { 
     // Loading iPhone 3.5" 
     [(PullToRefreshView *)[self.view viewWithTag:998] finishedLoading]; 
     [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
     NSLog(@"didFinish: %@; stillLoading:%@", [[webView request]URL], 
       ([email protected]"NO":@"YES")); 
    } 

} 


//Rotation 
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    if(fromInterfaceOrientation == UIInterfaceOrientationPortrait){ 
     [webView stringByEvaluatingJavaScriptFromString:@"rotate(0)"]; 

    } 
    else{ 
     [webView stringByEvaluatingJavaScriptFromString:@"rotate(1)"]; 
    } 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

//Image animation 

- (void)tick { 
    if (!webView.loading) { 
     [self performSelector:@selector(fadeimage) withObject:nil afterDelay:0.3]; 
    } 
} 

-(void)fadeimage{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.5]; 
    splash35InchPortrait.alpha = 0; 
    splash35InchLandscape.alpha = 0; 
    splashRetina35InchPortrait.alpha = 0; 
    splashRetina35InchLandscape.alpha = 0; 
    splash4InchPortrait.alpha = 0; 
    splash4InchLandscape.alpha = 0; 
    splashPadLandscape.alpha = 0; 
    splashPadPortrait.alpha = 0; 
    [UIView commitAnimations]; 
} 


- (void)viewDidUnload { 
    webView = nil; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
} 


@end 

UPDATE:

随着代码从我的旧项目和代码合并从下面(感谢kushyar)接受的答案。我设法得到它。如果有人好奇,这就是我所做的。

//Setting Splash Images 
    #define IS_IPHONE (!IS_IPAD) 
    #define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone) 

    bool isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136)); 
    if (isiPhone5) { 
     // Load iPhone 5 Splash 
     UIImage *splash4Inch = [UIImage imageNamed:@"[email protected]"]; 
     self.splash4InchPortrait = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, -20.0f, 320.0f, 568.0f)]; 
     [self.splash4InchPortrait setImage:splash4Inch]; 
     [self.view addSubview:self.splash4InchPortrait]; 
     [self.view bringSubviewToFront:self.splash4InchPortrait]; 
     self.splash4InchPortrait.contentMode = UIViewContentModeScaleToFill; 
    } 

    else if (IS_IPAD) { 
     // Load IPAD StoryBoard 
     UIImage *splashPad = [UIImage imageNamed:@"Default-Portrait~ipad.png"]; 
     self.splashPadPortrait = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, -20.0f, 768.0f, 1024.0f)]; 
     [self.splashPadPortrait setImage:splashPad]; 
     [self.view addSubview:self.splashPadPortrait]; 
     [self.view bringSubviewToFront:self.splashPadPortrait]; 
     self.splashPadPortrait.contentMode = UIViewContentModeScaleToFill; 
    } 

    else { 
     // Load the iPhone 3.5" Splash 
     UIImage *splash35Inch = [UIImage imageNamed:@"Default.png"]; 
     self.splash35InchPortrait = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, -20.0f, 320.0f, 480.0f)]; 
     [self.splash35InchPortrait setImage:splash35Inch]; 
     [self.view addSubview:self.splash35InchPortrait]; 
     [self.view bringSubviewToFront:self.splash35InchPortrait]; 
     self.splash35InchPortrait.contentMode = UIViewContentModeScaleToFill; 
    } 

回答

0

您声明形象首先创建一个UIImage后的UIImageView图像属性设置为图片中指出@ggrana。

所以无论

UIImage *myImage = [UIImage imageNamed:@"splash4InchPortrait"]; 
[splash4InchPortrait setImage:myImage]; 

[splash4InchPortrait setImage:[UIImage imageNamed:@"splash4InchPortrait"]]; 

您也可以initalize的- (void)loadView {}方法内您的UIImageView的。

确保您设置了您的UIImageView的框架,并将它们添加为您的UIViewControllerview的子视图。

最后一个注意事项:如上所述,当您定义图像时,不需要指定@2x。编译器会根据它运行的设备为你做这些事情。

编辑:好吧尝试添加到您的实施文件。

- (void)loadView { 
    [super loadView]; 

    UIImage *myImage = [UIImage imageNamed:@"[email protected]"]; 
    self.splash4InchPortrait = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 568.0f)]; 
    [self.splash4InchPortrait setImage:myImage]; 
    [self.view addSubview:self.splash4InchPortrait]; 
    [self.view bringSubviewToFront:self.splash4InchPortrait]; 



} 

最后,确保你,如果你没有在dealloc方法使用ARC释放你的形象。

- (void)dealloc { 
     [self.splash4InchPortrait release]; 
} 

这应该让你开始一条坚实的道路。

+0

因为我刚刚使用只是代码而勉强和我在一起。为了做到这一点,我需要改变什么?上面提供的代码。 – ChrisOSX

+0

所以在你的实现文件(.m)中你有viewDidLoad方法。你可以在它内部或按照我的建议做,使用 - (void)loadView {}方法。为了清楚起见,我将修改我的帖子。给我一点时间。 – kushyar

+0

不走,仍然没有出现。我只是试图让Default-568h图像现在显示。多数民众赞成我用我的启动画面。正如你在代码中看到的,我有很多其他的启动画面。 – ChrisOSX

0

我会建议您做到以下几点:

  • 创建一个自定义视图来封装您的组件连接在一起。
  • 您的自定义视图可以由组成其他自定义视图。

然后,而不是设置所有这些组件的隐藏属性,您可以定义一个单独的方法,并从控制器调用它。

模型 - 视图 - 控制器模式的精神在于控制器是模型和视图之间薄薄的“粘合”层。它的目的是在它们之间来回分流/翻译信息。

加载图片

注意:您只需要选择图像资源的名字 - 的UIImage会选择正确的资源(@ 2倍,568h @ 2X等)。

关于选择使用正确的图像:如果从Jetbrains的使用AppCode IDE,你可以做到以下几点:

    打字后
  • 按Ctrl空间[UIImage的imageNamed:@“”]得到一个可供选择的图像文件列表。在图像文件名

  • 按住Ctrl键单击,以使其在IDE和显示尺寸,像素深度等

(您可以也可能在Xcode做到这一点 - 不知道,因为它不是我的主要IDE)。