我使用页面控件滚动视图,当我滚动到下一页或从下一页滚动时,我想创建我的scrollview fadeIn / fadeOut的子视图。我发现我可以使用contentOffset来实现这个效果,但我无法做到。 事实上,我是新手,我希望如果有任何教程可以提供帮助。谢谢。
答案 0 :(得分: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];
}
答案 1 :(得分:0)
您可以查看有关视图动画的本教程:
Uiview-tutorial-for-ios-how-to-use-uiview-animation
为了达到你想要的效果,你可以使用这样的东西:
ScrollView委托方法检测滚动(如果您的唯一分页)
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
UIView* subView = [scrollView.subviews lastObject]; //Or however you access your subview
[UIView animateWithDuration:1.0f animations:^{
subView.alpha = 0.0f;
} completion:^(BOOL finished){
[UIView animateWithDuration:1.0f animations:^{
subView.alpha = 1.0f;
}];
}];
}
这将使您的子视图在2.0秒的范围内平滑淡出。你应该阅读一下这个动画块,但它们可能有点棘手。例如,我在第一个动画块完成后嵌套了第二个动画块,因为它们中的实际代码是立即处理的,动画只是在View的一侧进行。
希望这有帮助!
答案 2 :(得分:0)
你可以将它淡化为零,在没有动画的情况下更改contentOffset
,然后用1.0将其淡化为alpha:
- (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;
}];
}];
}
答案 3 :(得分:0)
使用Swift 2.0,假设您在myViewsArray中保存了一个子视图数组:
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
}
}