2012-10-17 19 views
0

我做持有一個UIScrollView一個觀點:的UIScrollView用的UIImageView和使用transitionFromView手勢舉止怪異

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. 如果我點擊在第一張圖片(滾動視圖中的第三張圖片)中,效果就是我想要的效果,這意味着前端圖像轉過來並顯示空白(白)回到中間有一些文字
  2. 如果我點擊第二張圖片,圖片會轉動,但後面是完全空的,顯示窗口的灰色背景。如果我滾動到其他圖像,仍然顯示正面圖像(如預期)
  3. 現在我點擊第三個圖像,它與1)很好。
  4. 當前佈局現在是[BackView,Nothing,Backview)
  5. 讓我們再運行一​​次。但現在我點擊最後一個圖像和它一樣2):

任何想法去錯在這裏什麼

編輯:一些新的發現我一倍圖片的數量,這是怎麼了前和Backviews被放置(翻轉每一個之後)P =圖片& B = Backview

  • 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)

回答

0

沒過完成重建,現在它工作。真的很奇怪,因爲我使用了完全相同的代碼。