Надеюсь, я смогу объяснить свою реальную проблему. У меня есть контроллер навигации, корневой контроллер которого является контроллером представления таблиц. Я хочу нарисовать фон контроллера табличного представления, добавив подвариант градиента в качестве фона. Каждая вещь работает хорошо, но фон градиента теперь применяется только под панелью навигации, даже если это полупрозрачный. На самом деле, я вижу это полупрозрачным, но в этой конфигурации фон просто начинается под навигационной панелью. Я хочу, чтобы панель навигации была градиентной, как на рисунке ниже. Как я могу это сделать? Является ли мой вопрос достаточно ясным? спасибо.Контроллер табличного представления под навигационным контроллером: фон с табличным фоном под навигационной панелью
[self drawGradientBackground];
- (void)drawGradientBackground
{
self.view.backgroundColor = [UIColor clearColor];
RMABackGround *background = [[RMABackGround alloc] initWithFrame:self.view.bounds];
background.gradientColors = @[[UIColor colorWithRed:52/255.0f green:153/255.0f blue:55/255.0f alpha:1.0f], [UIColor colorWithRed:53/255.0f green:168/255.0f blue:224/255.0f alpha:1.0f]];
[self.view addSubview:background];
}
Into RMABackGround class:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
NSMutableArray *colors = [NSMutableArray arrayWithCapacity:[self.gradientColors count]];
[self.gradientColors enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[UIColor class]]) {
[colors addObject:(__bridge id)[obj CGColor]];
} else if (CFGetTypeID((__bridge void *)obj) == CGColorGetTypeID()) {
[colors addObject:obj];
} else {
@throw [NSException exceptionWithName:@"CRGradientLabelError"
reason:@"Object in gradientColors array is not a UIColor or CGColorRef"
userInfo:NULL];
}
}];
CGContextSaveGState(context);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -rect.size.height);
CGGradientRef gradient = CGGradientCreateWithColors(NULL, (__bridge CFArrayRef)colors, NULL);
CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint,
kCGGradientDrawsAfterEndLocation | kCGGradientDrawsBeforeStartLocation);
CGGradientRelease(gradient);
CGContextRestoreGState(context);
[super drawRect:rect];
}
привет riccardo, это поможет, если вы добавите скриншот и код, как вы инициализируете и добавляете градиент :) – nburk
ах, я думаю, вам нужен определенный балл, чтобы добавить скриншоты к вопросам. попытайтесь получить этот результат. и еще один намек: пожалуйста, обновите вопрос кодом, чтобы он был на самом деле читаемым, а не размещал его в комментариях :) – nburk
как я могу вставить код, чтобы лучше объяснить мои вопросы? –