我正在尝试应用渐变作为视图的背景颜色(故事板的主视图).代码运行,但没有任何变化.我正在使用xCode Beta 2和Swift.
这是代码:
class Colors {
let colorTop = UIColor(red: 192.0/255.0, green: 38.0/255.0, blue: 42.0/255.0, alpha: 1.0)
let colorBottom = UIColor(red: 35.0/255.0, green: 2.0/255.0, blue: 2.0/255.0, alpha: 1.0)
let gl: CAGradientLayer
init() {
gl = CAGradientLayer()
gl.colors = [ colorTop, colorBottom]
gl.locations = [ 0.0, 1.0]
}
}
Run Code Online (Sandbox Code Playgroud)
然后在视图控制器中:
let colors = Colors()
func refresh() {
view.backgroundColor = UIColor.clearColor()
var backgroundLayer = colors.gl
backgroundLayer.frame = view.frame
view.layer.insertSublayer(backgroundLayer, atIndex: 0)
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个CAGradientLayer插入到应用程序底部弹出的这个小细节视图的底部.正如你所看到的,我将颜色从白色设置为清晰,但是出现了这种奇怪的灰色色调.有任何想法吗?
// Set up detail view frame and gradient
[self.detailView setFrame:CGRectMake(0, 568, 320, 55)];
CAGradientLayer *layer = [CAGradientLayer layer];
layer.frame = self.detailView.bounds;
layer.colors = [NSArray arrayWithObjects:(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor, nil];
layer.startPoint = CGPointMake(1.0f, 0.7f);
layer.endPoint = CGPointMake(1.0f, 0.0f);
[self.detailView.layer insertSublayer:layer atIndex:0];
Run Code Online (Sandbox Code Playgroud)
这是有问题的观点:
我正在尝试获取我的CAGradientLayers,我正在使用它创建漂亮的渐变背景,在旋转和模态视图演示时很好地调整大小,但它们不会播放球.
这是我刚创建的一个视频,显示了我的问题:请注意旋转时撕裂.
另请注意,此视频是通过在OS X上拍摄iPhone模拟器而创建的.我放慢了视频中的动画以突出显示我的问题.
这是我刚刚创建的Xcode项目(这是视频中显示的应用程序的源代码),基本上如图所示,旋转时出现问题,尤其是当模式呈现视图时:
Xcode Project,使用CAGradientLayer背景以模态方式呈现视图......
我理解使用以下内容是值得的:
[[self view] setBackgroundColor:[UIColor blackColor]];
Run Code Online (Sandbox Code Playgroud)
做一个合理的工作,使转换更加无缝,不那么刺耳,但如果你看我的视频,虽然目前处于横向模式,模态呈现一个视图,你会明白为什么上面的代码无济于事.
我有什么想法可以解决这个问题吗?
约翰
鉴于iOS上的任意UIView,是否有一种方法可以使用Core Graphics(CAGradientLayer)来应用"前景透明"渐变?
我不能使用标准的CAGradientLayer,因为背景比UIColor更复杂.我也无法覆盖PNG,因为背景会随着我的子视图沿其父垂直滚动视图滚动而改变(见图).
我有一个非优雅的后备:让我的uiview剪辑其子视图,并在滚动父滚动视图时移动背景的预渲染渐变png.

我在这里有一个UIButton,我想在图像下面有一个渐变作为背景(带有透明背景的符号),但我面临着两个不同的问题.
无论我如何尝试添加它,CAGradientLayer的第一个似乎都覆盖在图像的顶部,完全遮盖了图像.
其次,渐变本身似乎变暗了很多,就像按钮被禁用一样,但事实并非如此.
这是我的代码:
self.backButton = [[UIButton alloc] initWithFrame:CGRectMake(15, 35, 28, 28)];
[backButton addTarget:self
action:@selector(goBack)
forControlEvents:UIControlEventTouchUpInside];
[backButton setBackgroundColor:[UIColor clearColor]];
CAGradientLayer *buttonGradient = [CAGradientLayer layer];
buttonGradient.frame = backButton.bounds;
buttonGradient.colors = [NSArray arrayWithObjects:
(id)[[UIColor colorWithRed:.0
green:.166
blue:.255
alpha:1] CGColor],
(id)[[UIColor colorWithRed:.0
green:.113
blue:.255
alpha:1] CGColor],
nil];
[buttonGradient setCornerRadius:backButton.frame.size.width / 2];
[backButton.layer insertSublayer:buttonGradient
atIndex:0];
[backButton setImage:[UIImage imageNamed:@"backarrow.png"]
forState:UIControlStateNormal];
[backButton setEnabled:NO];
[topbarView addSubview:backButton];
Run Code Online (Sandbox Code Playgroud) 现在我有一个GA Gradient图层,我设置颜色,但我想将颜色点设置为(而不是顶部中心,左上角)和底部(而不是底部中心到右下角) )只是为了改变一点.思考?下面是我到目前为止的代码......我包含了核心动画,因为我是颜色之间的动画.
- (id)init {
self = [super init];
UIView *gradientView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.w, self.h)];
[self addSubview:gradientView];
[self sendSubviewToBack:gradientView];
topColor = [UIColor colorWithRed:0.012 green:0.012 blue:0.012 alpha:1];
bottomColor = [UIColor colorWithRed:1.000 green:0.765 blue:0.235 alpha:1];
gradient = [CAGradientLayer layer];
gradient.frame = gradientView.frame;
gradient.colors = [NSArray arrayWithObjects:(id)topColor.CGColor, (id)bottomColor.CGColor, nil];
gradient.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:0.7], nil];
[gradientView.layer addSublayer:gradient];
[self performSelector:@selector(animateColors) withObject:self afterDelay:2.0];
currentColorCount = 1;
return self;
}
Run Code Online (Sandbox Code Playgroud)
在左边(我有什么)在左边(我想要的)

我希望淡出滚动UITextView背景图像,类似于这个小例子顶部的渐变.

我正试图弄清楚如何使用CAGradientLayer和掩饰来实现这一点.当视图中的文本滚动(垂直)时,我需要文本在它到达视图框架之前变得透明,以给出它向上和向下淡出的幻觉.
有关如何实现这一目标的任何提示?
我使用以下CAGradientLayer:
let layer = CAGradientLayer()
layer.colors = [
UIColor.redColor().CGColor,
UIColor.greenColor().CGColor,
UIColor.blueColor().CGColor
]
layer.startPoint = CGPointMake(0, 1)
layer.endPoint = CGPointMake(1, 0)
layer.locations = [0.0, 0.6, 1.0]
Run Code Online (Sandbox Code Playgroud)
但是当我为图层设置bounds属性时,它只是拉伸一个方形渐变.我需要像Sketch 3应用程序图像中的结果(见上文).
我怎样才能做到这一点?
我有一个视图,它有一个CALayer.当我创建一个CAGradientLayer并将其应用为该视图的CALayer的掩码时,没有任何反应.为什么?
在-initWithFrame:视图中我这样做:
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
//[self.layer insertSublayer:gradient atIndex:0];
self.layer.mask = gradient;
Run Code Online (Sandbox Code Playgroud)
如果我更换
self.layer.mask = gradient;
Run Code Online (Sandbox Code Playgroud)
同
[self.layer insertSublayer:gradient atIndex:0];
Run Code Online (Sandbox Code Playgroud)
然后我看到了渐变.它是从黑色到白色.
有什么诀窍?
在我的应用程序中,我使用a CAGradientLayer来设置我的单元格的背景,这样:
retValue = [tableView dequeueReusableCellWithIdentifier:@"Cells" forIndexPath:indexPath];
UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor blueColor];
bgColorView.layer.masksToBounds = YES;
id startColor = (id)[[UIColor colorWithWhite:0.75 alpha:1] CGColor];
id endColor = (id)[[UIColor blueColor] CGColor];
CAGradientLayer* gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = retValue.contentView.bounds;
gradientLayer.colors = @[startColor,startColor,endColor,endColor];
gradientLayer.locations = @[[NSNumber numberWithFloat:0],
[NSNumber numberWithFloat:0.95],
[NSNumber numberWithFloat:0.95],
[NSNumber numberWithFloat:1]];
[gradientLayer setStartPoint:CGPointMake(0,0.5)];
[gradientLayer setEndPoint:CGPointMake(1,0.5)];
[bgColorView.layer addSublayer:gradientLayer];
retValue.selectedBackgroundView = bgColorView;
Run Code Online (Sandbox Code Playgroud)
(此代码在里面- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath)
它在iOS 6上工作正常但在iOS 7上不起作用,在新的iOS中,渐变始终是垂直的(忽略startPoint和endPoint)
有没有人在同一个问题上遇到过?
谢谢,
佩里
cagradientlayer ×10
ios ×10
calayer ×4
iphone ×3
swift ×2
ios7 ×1
objective-c ×1
uibutton ×1
uiview ×1