我一直试图完全用代码复制Apple的PhotoScroller示例应用程序但到目前为止没有成功。即使我将PhotoViewController,ImageScrollView和TileView类复制到一个新项目并以编程方式创建一个PhotoViewController实例,它也不像PhotoScroller应用程序那样工作:
在我复制的应用程序中,我可以在PhotoScroller应用程序中上下移动图像,我只能左右滚动图像。
分页滚动视图未将图像正确对齐,因此黑色填充可见,图像的某些部分位于屏幕外。
相反,如果我还复制PhotoViewController和MainWindow xib文件并将MainWindow设置为iPhone部署信息中的主界面,一切正常。所以xib文件中必定有一些魔力,尽管它们对我来说似乎基本上是空的。
以下是在应用程序中以编程方式创建PhotoViewController的代码:didFinishLaunchingWithOptions:method。
- (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中的应用程序: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的中心?
答案 0 :(得分:1)
我完全不知道你的问题是什么,因为发布的代码不完整,但下面是我的代码100%像PhotoScroller示例应用程序一样。我给出了3张图片的例子,请看这个
UIImage *iPhone = [UIImage imageNamed:@"iPhone.png"];
UIImage *iPad = [UIImage imageNamed:@"iPad.png"];
UIImage *macBookAir = [UIImage imageNamed:@"MacBookAir.png"];
CGRect scrollViewRect = self.view.bounds;
self.myScrollView = [[UIScrollView alloc] initWithFrame:scrollViewRect];
self.myScrollView.pagingEnabled = YES;
self.myScrollView.contentSize = CGSizeMake(scrollViewRect.size.width *scrollViewRect.size.height);
[self.view addSubview:self.myScrollView];
CGRect imageViewRect = self.view.bounds;
UIImageView *iPhoneImageView = [self newImageViewWithImage:iPhone frame:imageViewRect];
[self.myScrollView addSubview:iPhoneImageView];
/* Go to next page by moving the x position of the next image view */
imageViewRect.origin.x += imageViewRect.size.width;
UIImageView *iPadImageView = [self newImageViewWithImage:iPad frame:imageViewRect];
[self.myScrollView addSubview:iPadImageView];
/* Go to next page by moving the x position of the next image view */
imageViewRect.origin.x += imageViewRect.size.width;
UIImageView *macBookAirImageView = [self newImageViewWithImage:macBookAir frame:imageViewRect];
[self.myScrollView addSubview:macBookAirImageView];
答案 1 :(得分:0)
也许你应该做的是:
创建一个xib /或故事板。
将其类更改为PhotoViewController。
更改其视图所有者。
使用以下方式加载:
initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
或
[self.storyboard instantiateViewControllerWithIdentifier:@"photoViewName"]
最后将其添加为子视图:
[self.view addSubview:self.photoViewController.view]
不要使用:rootViewController /或push /或modal /或segue。
希望这有帮助。