0

最近、アプリでストーリーボードと xib を使用するのをやめました。そうしている間、画像を適切な画像名にリンクするのは非常に簡単でした。今、私はそれらなしでそれらをリンクし、トラブルに遭遇したいと考えています。こことグーグルでかなりの時間検索しましたが、あまり成功しませんでした。

これらの画像は、アプリ起動後のスプラッシュ スクリーンに使用され、白い閃光を防ぎます (IB で完璧に機能しました)。私の .h ファイルでこれを行いました。

@property (nonatomic, retain) UIImageView *splash4InchPortrait;

アプリにある画像からその画像名を宣言するにはどうすればよいでしょうか。

これは私が両方のファイルに持っているものです。私が何を扱っているかについてのアイデアを提供するだけです。

.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],
              (webView.loading?@"NO":@"YES"));
    }

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

    else {
        // Loading iPhone 3.5"
        [(PullToRefreshView *)[self.view viewWithTag:998] finishedLoading];
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        NSLog(@"didFinish: %@; stillLoading:%@", [[webView request]URL],
              (webView.loading?@"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

アップデート:

私の古いプロジェクトからマージされたコードと、以下の受け入れられた回答からのコードを使用します(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:@"Default-568h@2x.png"];
        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;
    }
4

2 に答える 2

0

次のことをお勧めします。

  • カスタム ビューを作成して、コンポーネントをまとめてカプセル化します。
  • カスタム ビューは、他のカスタム ビューで構成できます。

次に、これらすべてのコンポーネントに hidden 属性を設定するのではなく、これを行う単一のメソッドを定義して、コントローラーから呼び出すことができます。

Model-View-Controller パターンの精神は、コントローラーがモデルとビューの間の薄い「接着剤」層であるということです。その目的は、それらの間で情報をやり取り/変換することです。

画像の読み込み

注意: 画像リソース名のみを選択する必要があります。UIImage は正しいリソース (@2x、568h@2x など) を選択します。

使用する正しいイメージの選択について: Jetbrains の AppCode IDE を使用する場合は、次のことができます。

  • [UIImage imageNamed:@""] と入力した後に Ctrl-space を押して、選択する画像ファイルのリストを取得します。

  • 画像ファイル名を Ctrl キーを押しながらクリックして、IDE でレンダリングし、サイズ、ピクセル深度などを表示します。

(おそらく Xcode でこれを行うこともできます - 私のメインの IDE ではないのでわかりません)。

于 2013-06-03T03:12:54.443 に答える