4

ページコントロールを使用してスクロールビューを作成しましたが、次のページにスクロールするとき、または次のページからスクロールするときに、スクロールビューのサブビューをフェードイン/フェードアウトにしたいと考えています。contentOffset を使用してこの効果を作成できることがわかりましたが、作成できませんでした。実際、私は初心者であり、役立つチュートリアルがあればいいのにと思います。ありがとうございました。

4

4 に答える 4

4

UIPageControl に従ってインデックス付けされた self.viewControllers にビュー コントローラーの配列を保持していると仮定します。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{

    CGFloat diffFromCenter = ABS(scrollView.contentOffset.x - (self.pageControl.currentPage)*self.view.frame.size.width);
    CGFloat currentPageAlpha = 1.0 - diffFromCenter/self.view.frame.size.width;
    CGFloat sidePagesAlpha = diffFromCenter/self.view.frame.size.width;

    //NSLog(@"%f",currentPageAlpha);

    [[[self.viewControllers objectAtIndex:self.pageControl.currentPage] view] setAlpha:currentPageAlpha];

    if (self.pageControl.currentPage > 0)
        [[[self.viewControllers objectAtIndex:self.pageControl.currentPage-1] view] setAlpha:sidePagesAlpha];

    if (self.pageControl.currentPage < [self.viewControllers count]-1)
        [[[self.viewControllers objectAtIndex:self.pageControl.currentPage+1] view] setAlpha:sidePagesAlpha];

}
于 2014-10-26T13:36:39.180 に答える
0

ゼロにフェードし、contentOffsetアニメーションなしに変更し、1.0 でアルファにフェードバックできます。

- (IBAction)didChangePageView:(id)sender
{
    [UIView animateWithDuration:0.25
                     animations:^{
                         self.scrollView.alpha = 0.0;
                     }
                     completion:^(BOOL finished) {
                         [self.scrollView setContentOffset:CGPointMake(0, self.scrollView.frame.size.height * self.pageViewControl.currentPage) animated:NO];

                         [UIView animateWithDuration:0.25 animations:^{
                             self.scrollView.alpha = 1.0;
                         }];
                     }];
}
于 2013-09-15T19:17:47.703 に答える
0

Swift 2.0 では、myViewsArray に subViews の配列を保持していると仮定します。

func scrollViewDidScroll(scrollView: UIScrollView) {
    //Fade in/out effect while scrolling
    for (index,subView) in myViewsArray.enumerate() {
        label.alpha = 1 - abs(abs(scrollView.contentOffset.x) - subView.frame.width * CGFloat(index)) / subView.frame.width
    }
}
于 2016-03-14T08:31:26.517 に答える