0

テンプレートを学習するのは非常に混乱するため、シングルビューアプリを使用するだけで、新しいxcodeのページベースのアプリケーションを適応させるブックアプリを作成しようとするのは初めてです。

このコードを見つけて、この作品の HTML コンテンツを UIImageView に置き換えようとしていますが、失敗しました。

- (void) createContentPages
{
    NSMutableArray *pageStrings = [[NSMutableArray alloc] init];
    for (int i = 1; i < 11; i++)
    {
        NSString *contentString = [[NSString alloc]
                                   initWithFormat:@"<html><head></head><body><h1>Chapter %d</h1><p>This is the page %d of content displayed using UIPageViewController in iOS 5.</p></body></html>", i, i];
        [pageStrings addObject:contentString];
    }
    pageContent = [[NSArray alloc] initWithArray:pageStrings];
}

私がしようとしているのは、ページごとに異なる画像を表示することです。

これが私がしたことです。(私はそれが間違っていることを知っているので、試してみました)

- (void) createContentPages
{
    NSMutableArray *pageStrings = [[NSMutableArray alloc] init];
    for (int i = 1; i < 11; i++)
    {
        NSArray *photos = [[NSArray arrayWithObjects:   
                        [UIImage imageNamed:@"p1.png"],
                        [UIImage imageNamed:@"p2.png"],
                        [UIImage imageNamed:@"p3.png"],
                        [UIImage imageNamed:@"p4.png"],
                        nil];
        [pageStrings addObject:photos];
    }
    pageContent = [[NSArray alloc] initWithArray:pageStrings];
}

各ページにUIWebViewがあります。UIImageView に置き換えると実行される可能性はありますか?

残りのコードは次のとおりです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self createContentPages];
    NSDictionary *options = 
    [NSDictionary dictionaryWithObject:
     [NSNumber numberWithInteger:UIPageViewControllerSpineLocationMin]
                                forKey: UIPageViewControllerOptionSpineLocationKey];

    self.pageController = [[UIPageViewController alloc] 
                           initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl
                           navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                           options: options];

    pageController.dataSource = self;
    [[pageController view] setFrame:[[self view] bounds]];

    contentViewController *initialViewController = 
    [self viewControllerAtIndex:0];
    NSArray *viewControllers =  
    [NSArray arrayWithObject:initialViewController];

    [pageController setViewControllers:viewControllers  
                             direction:UIPageViewControllerNavigationDirectionForward 
                              animated:NO 
                            completion:nil];

    [self addChildViewController:pageController];
    [[self view] addSubview:[pageController view]];
    [pageController didMoveToParentViewController:self];
}

- (contentViewController *)viewControllerAtIndex:(NSUInteger)index
{
    // Return the data view controller for the given index.
    if (([self.pageContent count] == 0) || 
        (index >= [self.pageContent count])) {
        return nil;
    }

    // Create a new view controller and pass suitable data.
    contentViewController *dataViewController = 
    [[contentViewController alloc]
     initWithNibName:@"contentViewController" 
     bundle:nil];
    dataViewController.dataObject = 
    [self.pageContent objectAtIndex:index];
    return dataViewController;
}

- (NSUInteger)indexOfViewController:(contentViewController *)viewController
{
    return [self.pageContent indexOfObject:viewController.dataObject];
}

- (UIViewController *)pageViewController:
(UIPageViewController *)pageViewController viewControllerBeforeViewController:
(UIViewController *)viewController
{
    NSUInteger index = [self indexOfViewController:
                        (contentViewController *)viewController];
    if ((index == 0) || (index == NSNotFound)) {
        return nil;
    }

    index--;
    return [self viewControllerAtIndex:index];
}

- (UIViewController *)pageViewController:
(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    NSUInteger index = [self indexOfViewController:
                        (contentViewController *)viewController];
    if (index == NSNotFound) {
        return nil;
    }

    index++;
    if (index == [self.pageContent count]) {
        return nil;
    }
    return [self viewControllerAtIndex:index];
}

サブクラスで

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [webView loadHTMLString:dataObject 
                    baseURL:[NSURL URLWithString:@""]];
}
4

2 に答える 2

0

この 1 つの小さな変更で createContentPages() メソッドを使用します (UIImage だけでは、「ビュー」に配置できるものは何も表されません。代わりに、UIImages を保持する UIImageView を使用する必要があります)。

- (void) createContentPages
{
    NSMutableArray *pageStrings = [[NSMutableArray alloc] init];
    for (int i = 1; i < 11; i++)
    {
        NSArray *photos = [[NSArray arrayWithObjects:   
                        [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"p1.png"] autorelease],
                        [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"p2.png"] autorelease],
                        [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"p3.png"] autorelease],
                        [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"p4.png"] autorelease],
                        nil];
        [pageStrings addObject:photos];
    }
    pageContent = [[NSArray alloc] initWithArray:pageStrings];
}

メインコントローラーのコード (投稿したコードの大きなブロック) を使用できます。

必要な変更は、「サブクラス」と呼ばれるものだけです。(実際には、実際のページの表示を処理するのは UIPageViewController です)。

その UIPageViewController で、「webView」(UIWebView) を削除します。これはおそらく .xib ファイルで行われます (コードに追加されているようには見えません)。次に、UIPageViewController の viewWillAppear を次のようにします。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.view = dataObject;

}

これでうまくいくはずです。基本的に、UIWebView を使用して HTML データを表示するのではなく、代わりに dataObject (UIImageView) を UIPageViewController のサブビューとして追加するだけです。お役に立てれば!

于 2012-04-26T03:15:23.770 に答える
0

HTML タグを使用して HTML ページ内の画像をいつでも使用できます<IMG>。したがって、UIImageView を使用する理由はありません。

于 2012-05-12T02:40:03.940 に答える