我一直在尝试完全用代码复制 Apple 的 PhotoScroller 示例应用程序,但到目前为止还没有成功。即使我将 PhotoViewController、ImageScrollView 和 TileView 类复制到一个新项目并以编程方式创建一个 PhotoViewController 实例,它也不像在 PhotoScroller 应用程序中那样工作:
在我复制的应用程序中,我可以上下移动图像,而在 PhotoScroller 应用程序中,我只能左右滚动图像。
分页滚动视图未正确对齐居中的图像,因此黑色填充可见并且图像的某些部分不在屏幕上。
相反,如果我还复制 PhotoViewController 和 MainWindow xib 文件并将 MainWindow 设置为 iPhone 部署信息中的主界面,则一切正常。所以 xib 文件中一定有一些魔力,尽管它们在我看来基本上是空的。
这是在应用程序中以编程方式创建 PhotoViewController 的代码:didFinishLaunchingWithOptions: 方法。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.viewController = [[[PhotoViewController alloc] initWithNibName:@"PhotoViewController" bundle:nil] autorelease];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
)
那么在 PhotoViewController.xib 和 MainWindow.xib 文件中进行了哪些配置以使一切正常运行?
要理解我的意思,请按照以下简单步骤操作:
下载 WWDC 2010 示例代码。
打开磁盘映像,转到 iOS 文件夹,然后解压缩 PhotoScroller.zip。
解压 PhotoScroller.zip,在 Xcode 中打开,编译,在模拟器中运行。
请注意,一切都按预期正常工作。
现在将 AppDelegate.m 中的 application:didFinishLaunchingWithOptions: 更改为以下内容。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { PhotoViewController* vc = [[[PhotoViewController alloc] init] autorelease]; window.rootViewController = vc; [window addSubview:vc.view]; [window makeKeyAndVisible]; return YES; }
现在在模拟器中重建并重新运行。
请注意差异,图像未居中,您可以看到黑色填充。
那么 PhotoViewController.xib 中的什么设置使分页 UIScrollView 以 ImageScrollViews 为中心?