遮罩叠加在UIScrollView上

问题描述

| 您将如何在UIScrollView顶部叠加各种遮罩图像? 例如,我的图像左侧为黑色,右侧为黑色,中间变为白色。我想使用它,以便滚动视图中的项目逐渐淡出到侧面,并且中心项目完全不透明。 同样,滚动视图所放置的视图的背景是动态且可以更改的图像(不是纯色)。 有任何想法吗?

解决方法

您的问题最终成为我可以找到的关于基本问题的最佳信息,因此我决定在此处发布解决方案。 如果直接将蒙版添加到滚动视图中,由于某种原因,最终将蒙版应用于内容本身。 e。滚动时透明度不会移动。根据其他帖子的建议,我将渐变放置在滚动视图上方(或包含在其中)的视图中。结果,scrollContainer是一个UIViewObject,其唯一的子视图是所讨论的滚动视图。 此掩码配置为从左到右滚动。您可以通过操纵渐变的起点和终点属性,将其从上到下更改。 不利的一面是,它还会夹住滚动视图的滚动位置栏指示器。由于我的情况不需要一个,所以可以接受,但是您的行程可能会有所不同。
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = scrollView.bounds;
gradient.colors = [NSArray arrayWithObjects:
                   (id)[[UIColor colorWithWhite:0 alpha:0] CGColor],(id)[[UIColor colorWithWhite:0 alpha:1] CGColor],(id)[[UIColor colorWithWhite:0 alpha:0] CGColor],nil];
gradient.locations=[NSArray arrayWithObjects:
                    [NSNumber numberWithFloat:0],[NSNumber numberWithFloat:.1],[NSNumber numberWithFloat:.9],[NSNumber numberWithFloat:1],nil];
gradient.startPoint=CGPointMake(0,.5);
gradient.endPoint=CGPointMake(1,.5);
[scrollContainer.layer setMask:gradient];
,如果滚动视图后面有纯色背景,则只需将图像叠加在滚动视图顶部而不是尝试在其中进行遮罩,即可获得更好的性能。,尝试以下方法:
// I assume you are in a UIViewController and self.view is set to some kind of view

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,320,420)];
scrollView.backgroundColor = [UIColor redColor];
[self.view addSubview: scrollView];
[scrollView release];

// add img with gradient
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@\"my-gradient.png\"];
imgView.frame = CGRectMake(0,160,420);
[self.view addSubview: imgView];
[imgView release];
假设\“ my-gradient.png \”是实际上包含渐变的图像,这将为您提供一个从左侧开始并一直延伸到整个高度的中心的渐变。,这种操纵是大的资源消费者。最好的方法是(如果您的情况允许)将遮罩图像放在UIScrollView上。该图片的背景应该是透明的(例如png32),并且图片应该是alpha渐变。,使用insertView:yourView atIndex:0

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...