2

我有一个nextbutton在视图中调用的 UIButton。我已经autoresizingInterface Builder. 在 中viewDidLoad,我调用这个方法来为这个按钮设置渐变。gradientLayer非常适合应用程序的nextbutton纵向模式,但是,它不适合横向模式。对此有何建议?多谢。

-(void)toSetGradientNextButtons{
    CAGradientLayer* gradientLayer = [[CAGradientLayer alloc] init];
    [gradientLayer setBounds:[nextbutton bounds]];
    [gradientLayer setPosition:CGPointMake([nextbutton bounds].size.width/2,[nextbutton bounds].size.height/2)];

    [gradientLayer setColors:[NSArray arrayWithObjects:(id)[[UIColor blueColor] CGColor],(id)[[UIColor cyanColor] CGColor], nil]];
    [[nextbutton layer] insertSublayer:gradientLayer atIndex:0];
    [gradientLayer release];
}
4

1 回答 1

0

我只是在解决完全相同的问题。在我的代码中,在 viewWillAppear 和 viewDidLayoutSubviews 上调用了以下方法。

首先,我正在检查按钮是否已经具有该层(来自之前的 UI 状态和/或旋转)。如果是,则删除自定义层。然后它插入渐变层,同时使用自定义名称对其进行标记,这样一来就可以轻松找到它。

- (void)setupGradientOnLayoutSubviews
{
    // First, we'll remove old custom gradient layer if present (e.g. on rotation)
    for (__strong CALayer *layer in [[[self button] layer] sublayers]) {
        if ([[layer name] isEqualToString: @"myCustomGradient"] == YES) {
            [layer removeFromSuperlayer];
            break;
        }
    }

    // Configure the gradient
    _gradientLayer = [[CAGradientLayer alloc] init];
    _gradientLayer.frame = CGRectMake(0, 0, self.button.frame.size.width, self.button.frame.size.height);
    _gradientLayer.masksToBounds = NO;
    _gradientLayer.cornerRadius = 5.0;
    _gradientLayer.colors = [NSArray arrayWithObjects:(id)[RGB(205, 6, 106) CGColor], (id)[RGB(147, 2, 76) CGColor], nil];
    _gradientLayer.borderColor = [RGB(193, 5, 99) CGColor];
    _gradientLayer.borderWidth = 1.0f;

    _gradientLayer.shadowColor = [[UIColor blackColor] CGColor];
    _gradientLayer.shadowOffset = CGSizeMake(1,1);
    _gradientLayer.shadowRadius = 2;
    _gradientLayer.shadowOpacity = 0.2;
    _gradientLayer.name = @"myCustomGradient";

    // Add the gradient layer
    [self.button.layer insertSublayer:_gradientLayer atIndex:0];
}
于 2013-06-28T11:29:13.530 回答