iOS : 通过滚动更改值

iOS : Change value by scrolling

我正在尝试通过 UIScrollView 向 Up/Down 方向滚动来更改 UIViewalpha 值,我的问题是如何设置 alpha 值用户向上或向下滚动时我的视图?类似于 UISlider 但带有 UIScrollView

- (void)viewDidLoad {
    [super viewDidLoad];

    UIView *viewx = [[UIView alloc]initWithFrame:self.view.frame];
    [_scrollView setContentSize:viewx.frame.size];
    viewx.backgroundColor = [UIColor yellowColor];
    [_scrollView addSubview:viewx];


    _scrollView.delegate = self;

}

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    pointNow = scrollView.contentOffset;
}

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView.contentOffset.y<pointNow.y) {
        NSLog(@"down");

        _redView.alpha = ???

    } else if (scrollView.contentOffset.y>pointNow.y) {
        NSLog(@"up");
      _redView.alpha = ???

    }
}

也许尝试使用滚动视图从原点偏移的百分比作为标准来设置 alpha 值,例如:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
    _redView.alpha = 1-(scrollView.contentOffset.y/(scrollView.contentSize.height - scrollView.frame.size.height));
}

所以在这种情况下,如果滚动视图位于顶部 scrollView.contentOffset.y == 0,因此 alpha == 1,即 alpha = 1-(0/(contentHeight - scrollViewHeight)) = 1-0 = 1

如果它在底部,scrollView.contentOffset.y == scrollView.contentSize.height - scrollView.frame.size.height(因为内容偏移不会完全到达内容视图的底部,而是会到达内容视图的底部减去滚动视图的高度)。因此 alpha == 0,即 alpha = 1 - ((contentHeight - scrollViewHeight)/(contentHeight - scrollViewHeight)) = 1-1 = 0.

您希望 alpha 基于滚动视图的位置,还是只想向上滚动使视图更可见并向下滚动使其更透明?

如果您想要后者,您只需在 alpha 向上滚动时添加 .01 或 .1,或者在向下滚动时减去它。

示例:

_redView.alpha = _redView.alpha - 0.1 //in the "down" statement

如果您希望它基于偏移量,那么您需要一个公式将滚动视图的偏移量转换为 0.0 到 1 之间的数字。

示例:

float alpha = 1 - (self.view.frame.size.width/self.scrollView.contentSize.height)