iOS : 通过滚动更改值
iOS : Change value by scrolling
我正在尝试通过 UIScrollView
向 Up/Down 方向滚动来更改 UIView
的 alpha
值,我的问题是如何设置 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)
我正在尝试通过 UIScrollView
向 Up/Down 方向滚动来更改 UIView
的 alpha
值,我的问题是如何设置 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)