Trying to create a custom horizontal UIPickerView using UIScrollView - how do I fade the edges out like in UIPickerView?
在 iOS 7 中,当
如果我使用的是 UIScrollView,是否可以实现类似的效果,即边缘的文本略微阴影/混合到背景中?
请参阅此处和此处了解我对类似问题的回答。
我的解决方案是继承
上面答案中的代码也在github上。
希望有帮助!
我对这个类做了类似的事情来淡化滚动字幕的左右边缘。比使用两个图像更省事,因为您可以轻松地调整大小或重新着色:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | @interface MarqueeFadeOverlay : UIView @property(assign, nonatomic) CGGradientRef gradientLayer; - (id)initWithFrame:(CGRect)frame andEndFadeWidth:(float)fadeWidth andFadeBarColor:(UIColor *)color; @end @implementation MarqueeFadeOverlay { UIColor *fadeBarColor; float endFadeWidth; } - (id)initWithFrame:(CGRect)frame andEndFadeWidth:(float)fadeWidth andFadeBarColor:(UIColor *)color { self = [super initWithFrame:frame]; if (self) { endFadeWidth = fadeWidth; fadeBarColor = color; [self setOpaque:NO]; } return self; } - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGContextDrawLinearGradient(context, self.gradientLayer, CGPointMake(0.0, 0.0), CGPointMake(self.frame.size.width, 0.0), kCGGradientDrawsBeforeStartLocation); } - (CGGradientRef)gradientLayer { if (_gradientLayer == nil) { CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGFloat *colorComponents = [self rgbaFrom:fadeBarColor]; if (endFadeWidth == 0) endFadeWidth = 0.1; CGFloat locations[] = {0.0, endFadeWidth, 1.0 - endFadeWidth, 1.0}; CGFloat colors[] = {colorComponents[0], colorComponents[1], colorComponents[2], 1.00, colorComponents[0], colorComponents[1], colorComponents[2], 0, colorComponents[0], colorComponents[1], colorComponents[2], 0, colorComponents[0], colorComponents[1], colorComponents[2], 1.00}; _gradientLayer = CGGradientCreateWithColorComponents(colorSpace, colors, locations, sizeof(colors) / (sizeof(colors[0]) * 4)); CGColorSpaceRelease(colorSpace); } return _gradientLayer; } -(CGFloat *)rgbaFrom:(UIColor *)color { CGColorRef colorRef = [color CGColor]; return (CGFloat *) CGColorGetComponents(colorRef); } |
您只需使用框架、0 到 1 之间的淡入淡出宽度和与背景匹配的颜色来初始化一个,然后添加到父视图中。
我会为此放置两个自定义叠加视图,您将它们放置在滚动视图的顶部。视图可以包含一个从全白到 alpha 为 0 的渐变的预制图像,或者您可以使用 Core Graphics 或
在代码中绘制图像
如果您在视图上设置