2012-08-13 25 views
2

我在視圖中有一個名爲nextbutton的UIButton。我已經在Interface Builder中設置了autoresizing這個按鈕。在viewDidLoad中,我調用此方法爲此按鈕設置漸變。 gradientLayer很適合nextbutton在應用程序的肖像模式,但是,它不處於橫向模式。對此有何建議?非常感謝。iOS:旋轉視圖,按鈕的漸變圖層不自動調整

-(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]; 
} 

回答

0

I'was只是解決一模一樣的問題。以下方法在我的代碼中的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]; 
}