2014-01-23 3 views
0

Я хотел был бы создать градиент цвета с CAGradientLayer для множественных взглядов разного размера. Я не знаю, как определить рамку отдельно:CAGradientLayer для разных видов

UIColor *darkOp = [UIColor colorWithRed:0.2f green:0.2f blue:0.27f alpha:1.0]; 
UIColor *lightOp = [UIColor colorWithRed:0.36f green:0.35f blue:0.42f alpha:1.0]; 

// Create the gradient 
CAGradientLayer *gradient = [CAGradientLayer layer]; 

// Set colors 
gradient.colors = [NSArray arrayWithObjects: 
        (id)darkOp.CGColor, 
        (id)lightOp.CGColor, 
        nil]; 
//set radius 
gradient.cornerRadius = 5.0; 

// Set bounds BUT just for one view size 
gradient.frame = self.numberRegionView.bounds; //<-- here I can just define one frame size 

// Add the gradient to one view 
[self.numberRegionView.layer insertSublayer:gradient atIndex:0]; 

//but how to add the gradient layer to views with different sizes ??? 
//[self.graphRegionView.layer insertSublayer:gradient atIndex:0]; ??? 
//[self.barRegionView.layer insertSublayer:gradient atIndex:0]; ??? 

Спасибо!

+0

Почему бы не создать новый слой градиента для каждого нового вида/размера? Я не уверен в повторном использовании CAGradientLayer. – Putz1103

+0

Спасибо Putz, это определенно сработало бы, но я надеялся найти решение, которое могло бы избежать повторения одного и того же кода несколько раз. – JFS

+0

Я отправлю код в качестве ответа, чтобы показать, что это не совсем повторяющийся код. Используйте его, как хотите. – Putz1103

ответ

1
-(void)setGradientForView:(UIView*)view 
{ 
    static UIColor *darkOp = [UIColor colorWithRed:0.2f green:0.2f blue:0.27f alpha:1.0]; 
    static UIColor *lightOp = [UIColor colorWithRed:0.36f green:0.35f blue:0.42f alpha:1.0]; 

    // Create the gradient 
    CAGradientLayer *gradient = [CAGradientLayer layer]; 

    // Set colors 
    gradient.colors = [NSArray arrayWithObjects: 
        (id)darkOp.CGColor, 
        (id)lightOp.CGColor, 
        nil]; 
    //set radius 
    gradient.cornerRadius = 5.0; 

    // Set bounds BUT just for one view size 
    gradient.frame = view.bounds; //<-- here I can just define one frame size 

    // Add the gradient to one view 
    [view.layer insertSublayer:gradient atIndex:0]; 
} 

Затем используйте этот код для трех видов:

[self setGradientForView:self.numberRegionView]; 
[self setGradientForView:self.barRegionView]; 
[self setGradientForView:self.numberRegionView]; 
+0

Но теперь view.bounds является незаявленным идентификатором. – JFS

+0

О, держись, я не видел верхнюю часть ... – JFS

+0

Мне это нравится. Большое спасибо. Размер размера градиента не обновляется для большего размера экрана. Есть идеи? Спасибо, в любом случае! – JFS