Я вычислил программный подход к этому. Это предполагает создание округленного слоя, а затем рисование квадратного слоя поверх него. Вам нужно будет немного поиграть с цветами и позициями градиента, чтобы получить что-то хорошее.
ПРИМЕЧАНИЕ: Не уверен, если это решение будет работать для вас, учитывая ваши требования о масках
+(void) makeGradientButton: (UIButton*) button
{
//create a rounded layer
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = button.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
gradient.cornerRadius = 8.0f;
//now create a square layer that draws over the top
CAGradientLayer *gradient2 = [CAGradientLayer layer];
gradient2.frame = CGRectMake(0, 9, button.bounds.size.width, button.bounds.size.height-9);
gradient2.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor redColor] CGColor], nil];
gradient2.cornerRadius = 0.0f;
[gradient setMasksToBounds:YES];
[button.layer insertSublayer:gradient atIndex:0];
[button.layer insertSublayer:gradient2 atIndex:1];
[button setBackgroundColor:[UIColor clearColor]];
}
Я думаю, вы должны сделать слой прозрачным и установить содержимый слой к изображению с верхними углами закругленных. –
Я надеялся сделать это программно. Это должно быть возможно! – jadengeller
Я хочу сделать то же самое, вы уже это поняли? – Brian