0

UIScrollview を保持するビューを作成しました。

self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(10, 65, 300, 188)];
//BackViews will hold the Back Image
BackViews = [[NSMutableArray alloc] init];
for (int i=0; i<BigPictures.count; i++) {
    [BackViews addObject:[NSNull null]];
}
FrontViews = [[NSMutableArray alloc] initWithCapacity:BigPictures.count];
[self.pageControl setNumberOfPages:BigPictures.count];

次に、画像を含むいくつかの UIImageviews を追加します。

//BigPictures holds objects of type UIImage
for (int i = 0; i < BigPictures.count; i++) {
    UIImageView *ImageView = [[UIImageView alloc] initWithImage:[BigPictures objectAtIndex:i]];
    ImageView.frame = [self.scrollView bounds];
    [ImageView setFrame:CGRectMake(self.scrollView.frame.size.width * i, ImageView.frame.origin.y, ImageView.frame.size.width, ImageView.frame.size.height)];
    //this saves the FrontView for later (flip)
    [FrontViews insertObject:ImageView atIndex:i];
    [self.scrollView addSubview:test];
}

// Detect Single Taps on ScrollView
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(flip)];
[self.scrollView addGestureRecognizer:tap];

self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * BigPictures.count, self.scrollView.frame.size.height);
self.scrollView.pagingEnabled = YES;
self.scrollView.delegate = self;

これまでのところとても良いです。次に、flipImage 部分を実行するメソッド:

- (void)flip {
    int currentPage = self.pageControl.currentPage;
    UIView *Back = nil;
    if ([BackViews objectAtIndex:currentPage] == [NSNull null]) {
    //CreateBackView is just creating an UIView with text in it.
    Back = [self CreateBackView];
    [BackViews replaceObjectAtIndex:currentPage withObject:Back];
    [UIView transitionFromView:[[self.scrollView subviews] objectAtIndex:currentPage] toView:[BackViews objectAtIndex:currentPage] duration:0.8 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL];
} else {
    [UIView transitionFromView:[[self.scrollView subviews] objectAtIndex:currentPage] toView:[FrontViews objectAtIndex:currentPage] duration:0.8 options:UIViewAnimationOptionTransitionFlipFromRight completion:NULL];
    [BackViews replaceObjectAtIndex:currentPage withObject:[NSNull null]];
}
[self.view addSubview:Back];
[self rebuildScrollView];

}

これは、rebuildScrollView が行うことです。

- (void)rebuildScrollView
{
    for (UIView *subview in self.scrollView.subviews) {
    [subview removeFromSuperview];
}

for (int i = 0; i < BigPictures.count; i++) {
    if ([BackViews objectAtIndex:i] == [NSNull null]) {
        [self.scrollView addSubview:[FrontViews objectAtIndex:i]];
    } else {
        [self.scrollView addSubview:[BackViews objectAtIndex:i]];
    }
}
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * BigPictures.count, self.scrollView.frame.size.height);
self.scrollView.pagingEnabled = YES;
self.scrollView.delegate = self;
}

したがって、動作は次のとおりです。

  1. 最初の画像 (スクロールビューで 3 枚中 1 枚) をクリックすると、希望どおりの効果が得られます。つまり、正面の画像が反転し、中央にテキストが表示された空の (白い) 背面が表示されます。
  2. 2 番目の画像をクリックすると、画像が回転しますが、背面は完全に空で、ウィンドウの灰色の背景が表示されます。他の画像にスクロールすると、まだ前面の画像が表示されます(予想どおり)
  3. 3 番目の画像をクリックすると、1) と同じです。
  4. 現在のレイアウトは [BackView, Nothing, Backview) になりました。
  5. それをもう一度実行しましょう。しかし今、最後の画像をクリックすると、2)と同じです:(

ここで何がうまくいかないのですか?

編集: いくつかの新しい発見。私は写真の量を 2 倍にしました。P = 写真 & B = バックビュー。

  • P_1(B_1) - 実際には唯一の正しいもの
  • P_2(空 - B_2 である必要があります)
  • P_3(B_2 - B_3 である必要があります)
  • P_4(空 - B_4 である必要があります)
  • P_5(B_3 - B_5 である必要があります)
  • P_6(空 - B_6 である必要があります)
4

1 に答える 1

0

完全な再構築を行い、現在は機能しています。まったく同じコードを使用したため、本当に奇妙です。

于 2013-01-28T14:11:41.607 に答える