3

有人可以帮助我了解滚动视图滑动作为 Yahoo Weather iOS App 的效果吗?谢谢!

self.backgroundView = [[DKLiveBlurView alloc] initWithFrame: self.view.bounds];        
    NSString *fileName = [[NSBundle mainBundle] pathForResource:[self.imageArray objectAtIndex:randomId] ofType:@"png"];        
    UIImage *image = [UIImage imageWithContentsOfFile:fileName];
    self.backgroundView.originalImage = image;
    self.backgroundView.scrollView = self.tableView;
    self.backgroundView.isGlassEffectOn = YES;
    self.tableView.backgroundView = self.backgroundView;
4

3 回答 3

2

您可以使用带有分页的 UIScrollView 来实现它。通过在 didScroll 上设置适当的 contentOffset,您可以实现雅虎天气中的视差效果。WWDC 2013 上有一个关于嵌套滚动视图的精彩视频,可以参考。

我还使用 scrollView 创建了一个示例项目,它实现了视差效果 - https://github.com/vin25/SideScrollParallaxEffect-iOS

于 2014-04-19T09:25:36.983 回答
1

我相信天气应用程序正在使用UIPageController,并且过渡效果会自动随之而来。你可以找到很多关于它是如何工作的教程(例如看看这个

在应用的视图控制器头文件中,为 : 添加一个属性UIPageViewController

#import <UIKit/UIKit.h>

@interface YourAppViewController : UIViewController <UIPageViewControllerDataSource>

@property (strong, nonatomic) UIPageViewController *pageController;

@end

在您应用的视图控制器 .m 文件中,实现以下方法:

  • 增加/减少屏幕索引并返回视图控制器显示):

    - (UIViewController *) pageViewController:(UIPageViewController *)pageViewController
    viewControllerBeforeViewController:(UIViewController *)viewController
    {
        NSUInteger index = [(YourAppViewController *)viewController index];
        if (index == 0) {
            return nil;
        }
    
        index--;
    
        return [self viewControllerAtIndex:index];
    }
    
    - (UIViewController *) pageViewController:(UIPageViewController *)pageViewController 
    viewControllerAfterViewController:(UIViewController *)viewController
    {
        NSUInteger index = [(YourAppViewController *)viewController index];
        index++;
    
        if (index == 5) {
            return nil;
        }
    
        return [self viewControllerAtIndex:index];
    }
    
  • 最后,设置页面指示器中的点数以及必须在开始时选择哪个点。

    - (NSInteger) presentationCountForPageViewController:
      (UIPageViewController *)pageViewController 
    {
        // The number of items reflected in the page indicator.
        return 5;
    }
    
    - (NSInteger) presentationIndexForPageViewController:
    (UIPageViewController *)pageViewController
    {
        // The selected item reflected in the page indicator.
        return 0;
    }
    
于 2013-09-06T10:31:02.617 回答
0

我使用一个普通的 UIPageViewController 子类实现了 Yahoo Weather 的视差效果,并为背景图像的视差效果实现了自动布局约束。(我不想用页面重新创建整个滚动视图,因为我确信 UIPageViewController 已经免费处理了很多东西)。

这是: https ://github.com/frederic-adda/TestParallax/tree/master

于 2018-12-30T18:24:17.973 回答