2012-02-21 123 views
1

Apple如何在日历之间进行iPhone日历日视图转换?当你在日视图上滑动手指时,它看起来有点像旋转木马,当日视图在屏幕中间时,顶部的日期会发生变化。iOS:日历日视图转换

我已经重新创建了自己的日视图,但需要弄清楚如何在几天之间进行转换。

回答

1

如果我不得不猜测?在UIScrollView中使用3个窗格,如this method

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    documentTitles = [[NSMutableArray alloc] init]; 

    // create our array of documents 
    for (int i = 0; i < 10; i++) { 
    [documentTitles addObject:[NSString stringWithFormat:@"Document %i",i+1]]; 
    } 

    // create placeholders for each of our documents 
    pageOneDoc = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
    pageTwoDoc = [[UILabel alloc] initWithFrame:CGRectMake(320, 0, 320, 44)]; 
    pageThreeDoc = [[UILabel alloc] initWithFrame:CGRectMake(640, 0, 320, 44)]; 

    pageOneDoc.textAlignment = UITextAlignmentCenter; 
    pageTwoDoc.textAlignment = UITextAlignmentCenter; 
    pageThreeDoc.textAlignment = UITextAlignmentCenter; 

    // load all three pages into our scroll view 
    [self loadPageWithId:9 onPage:0]; 
    [self loadPageWithId:0 onPage:1]; 
    [self loadPageWithId:1 onPage:2]; 

    [scrollView addSubview:pageOneDoc]; 
    [scrollView addSubview:pageTwoDoc]; 
    [scrollView addSubview:pageThreeDoc]; 

    // adjust content size for three pages of data and reposition to center page 
    scrollView.contentSize = CGSizeMake(960, 416); 
    [scrollView scrollRectToVisible:CGRectMake(320,0,320,416) animated:NO]; 
} 

- (void)loadPageWithId:(int)index onPage:(int)page 
{ 
    // load data for page 
    switch (page) { 
    case 0: 
     pageOneDoc.text = [documentTitles objectAtIndex:index]; 
     break; 
    case 1: 
     pageTwoDoc.text = [documentTitles objectAtIndex:index]; 
     break; 
    case 2: 
     pageThreeDoc.text = [documentTitles objectAtIndex:index]; 
     break; 
    } 
} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)sender 
{ 
    // All data for the documents are stored in an array (documentTitles). 
    // We keep track of the index that we are scrolling to so that we 
    // know what data to load for each page. 
    if(scrollView.contentOffset.x > scrollView.frame.size.width) 
    { 
    // We are moving forward. Load the current doc data on the first page. 
    [self loadPageWithId:currIndex onPage:0]; 

    // Add one to the currentIndex or reset to 0 if we have reached the end. 
    currIndex = (currIndex $gt;= [documentTitles count]-1) ? 0 : currIndex + 1; 
    [self loadPageWithId:currIndex onPage:1]; 

    // Load content on the last page. This is either from the next item in the array 
    // or the first if we have reached the end. 
    nextIndex = (currIndex $gt;= [documentTitles count]-1) ? 0 : currIndex + 1; 

    [self loadPageWithId:nextIndex onPage:2]; 
    } 
    if(scrollView.contentOffset.x $lt; scrollView.frame.size.width) { 
    // We are moving backward. Load the current doc data on the last page. 
    [self loadPageWithId:currIndex onPage:2]; 

    // Subtract one from the currentIndex or go to the end if we have reached the beginning. 
    currIndex = (currIndex == 0) ? [documentTitles count]-1 : currIndex - 1; 
    [self loadPageWithId:currIndex onPage:1]; 

    // Load content on the first page. This is either from the prev item in the array 
    // or the last if we have reached the beginning. 
    prevIndex = (currIndex == 0) ? [documentTitles count]-1 : currIndex - 1; 

    [self loadPageWithId:prevIndex onPage:0]; 
    }  

    // Reset offset back to middle page 
    [scrollView scrollRectToVisible:CGRectMake(320,0,320,416) animated:NO]; 
} 
+0

我猜他们只加载3在一次?左侧,中间和右侧页面?你真的认为它是一个scrollview? – Bot 2012-02-21 18:55:51

+0

我这样做,UIScrollView非常强大,但它被许多人误解 – slf 2012-02-22 16:55:42

0

你不需要滚动视图来做到这一点;只需在并排排列的三个子视图中创建一个视图,并添加一个平移手势识别器。

如果用户移动到正确的视图,请将最左边的视图取出,在右边添加一个视图,并将当前右视图设置为中心视图。你还需要为左视图做类似的事情。