【问题标题】:iOS: rotating a view, gradient layer of button does not autoresizingiOS:旋转视图,按钮的渐变层不会自动调整大小
【发布时间】:2012-08-13 16:55:03
【问题描述】:

我在视图中有一个名为 nextbutton 的 UIButton。我已经在Interface Builder 中设置了autoresizing 这个按钮。在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];
}

【问题讨论】:

    标签: ios uibutton gradient autoresizingmask


    【解决方案1】:

    我只是在解决完全相同的问题。在我的代码中对 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];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多