完全在代码中复制PhotoScroller

时间:2013-02-23 17:57:29

标签: iphone ios ios6 uiscrollview xib

我一直试图完全用代码复制Apple的PhotoScroller示例应用程序但到目前为止没有成功。即使我将PhotoViewController,ImageScrollView和TileView类复制到一个新项目并以编程方式创建一个PhotoViewController实例,它也不像PhotoScroller应用程序那样工作:

  1. 在我复制的应用程序中,我可以在PhotoScroller应用程序中上下移动图像,我只能左右滚动图像。

  2. 分页滚动视图未将图像正确对齐,因此黑色填充可见,图像的某些部分位于屏幕外。

  3. 相反,如果我还复制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文件中配置什么才能使一切运行良好?


    要明白我的意思,请按照以下简单步骤操作:

    1. 下载WWDC 2010示例代码。

      http://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?code=y&source=x&bundleID=20645

    2. 打开磁盘映像,转到iOS文件夹,然后解压缩PhotoScroller.zip。

    3. 解压缩PhotoScroller.zip,在Xcode中打开,构建并在模拟器中运行。

    4. 请注意,一切都按预期正常工作。

    5. 现在将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;
      }
      
    6. 现在重建并在模拟器中重新运行。

    7. 注意区别,图片不居中,你可以看到黑色填充。

    8. 那么PhotoViewController.xib中的哪个设置会使分页UIScrollView成为ImageScrollViews的中心?

2 个答案:

答案 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)

也许你应该做的是:

  1. 创建一个xib /或故事板。

  2. 将其类更改为PhotoViewController。

  3. 更改其视图所有者。

  4. 使用以下方式加载:

    initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    

    [self.storyboard instantiateViewControllerWithIdentifier:@"photoViewName"]
    
  5. 最后将其添加为子视图:

    [self.view addSubview:self.photoViewController.view]
    
  6. 不要使用:rootViewController /或push /或modal /或segue。

  7. 请勿将其嵌入导航控制器中。
  8. 希望这有帮助。