对于 iPhone 应用,我们的目标很简单:显示一个启动页面,然后在 UIWebview 准备好显示其页面时将其隐藏。
在 UIWebview 准备好显示之前,我们需要默认的闪屏。否则,会短暂出现白屏。
不幸的是,启动画面在我们让它徘徊后无法隐藏。默认的初始屏幕仍然可见,隐藏了下面的 UIWebview。
我们理解这可能违反 Apple 准则。
对于原型来说,这比什么都重要,我们想了解我们做错了什么。有什么线索吗?
我们使用的是 Xcode 4.2。
AppDelegate.m:
//
// AppDelegate.m
//
// Created by Macintosh User on 6/4/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import "AppDelegate.h"
#import "ViewController.h"
@implementation AppDelegate
@synthesize window = _window;
@synthesize viewController = _viewController;
@synthesize imgv;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
imgv = [[UIImageView alloc] init];
[imgv setImage:[UIImage imageNamed:@"Default.png"]];
[imgv setFrame:CGRectMake(0, 0, 320, 480)];
[self.window addSubview:imgv];
return YES;
}
@end
视图控制器.m:
//
// ViewController.m
//
//
// Created by Macintosh User on 6/4/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import "AppDelegate.h"
#import "ViewController.h"
@implementation ViewController
#pragma mark - View lifecycle
- (void)viewDidLoad
{
CGRect webFrame = CGRectMake(0.0, 0.0, 320.0, 460.0);
UIWebView *webView = [[UIWebView alloc] initWithFrame:webFrame];
[webView setBackgroundColor:[UIColor clearColor]];
NSString *urlAddress = @"http://www.cnn.com";
NSURL *url = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestObj];
for (id subview in webView.subviews)
if ([[subview class] isSubclassOfClass: [UIScrollView class]])
((UIScrollView *)subview).bounces = NO;
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
UIImageView *imageView = appDelegate.imgv;
[imageView removeFromSuperview];
[imageView setHidden:YES];
imageView = nil;
[self.view addSubview:webView];
[self.view bringSubviewToFront:webView];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"Done loading UIWebView");
}
@end
当前 ViewController.m 生成错误:
//
// ViewController.m
// Stroll
//
// Created by Macintosh User on 6/4/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import "AppDelegate.h"
#import "ViewController.h"
@implementation ViewController
@synthesize splash;
#pragma mark - View lifecycle
- (void)viewDidLoad
{
CGRect webFrame = CGRectMake(0.0, 0.0, 320.0, 460.0);
UIWebView *webView = [[UIWebView alloc] initWithFrame:webFrame];
webView.delegate = self;
[webView setBackgroundColor:[UIColor clearColor]];
NSString *urlAddress = @"http://www.cnn.com";
NSURL *url = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestObj];
for (id subview in webView.subviews)
if ([[subview class] isSubclassOfClass: [UIScrollView class]])
((UIScrollView *)subview).bounces = NO;
/*
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
UIImageView *imageView = appDelegate.imgv;
[imageView removeFromSuperview];
[imageView setHidden:YES];
imageView = nil; */
[self.view addSubview:webView];
[self.view bringSubviewToFront:webView];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"Done loading UIWebView");
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
self.view.userInteractionEnabled = NO;
splash = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
splash.image = [UIImage imageNamed:@"Default.png"];
[self.view addSubview:splash];
});
}
-(void) webViewDidFinishLoad:(UIWebView *)webView {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
[splash removeFromSuperView];
});
}
@end