2012-05-29 5 views
0

Я использую метод described here для установки фона градиента для ванили UIView экземпляр без создания подкласса. Однако вид выходит полностью черным. Вот мой код:Рисование градиента как фона фона без подкласса

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 315.0f, 44.0f)]; 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGContextRef context = CGBitmapContextCreate(NULL, 315.0, 44.0f, 8, 4 * 315, colorSpace, kCGImageAlphaNoneSkipFirst); 

// Colors only for debugging purposes 
CGColorRef startColor = (__bridge CGColorRef)[UIColor greenColor]; 
CGColorRef endColor = (__bridge CGColorRef)[UIColor redColor]; 
CFMutableArrayRef colors = CFArrayCreateMutable(kCFAllocatorDefault, 2, &kCFTypeArrayCallBacks); 
CFArrayAppendValue(colors, startColor); 
CFArrayAppendValue(colors, endColor); 

CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, colors, (const CGFloat []){0.25f, 0.75f}); 

CGContextDrawLinearGradient(context, gradient, CGPointZero, CGPointMake(0.0f, 44.0f), 0); 

CGImageRef cgImage = CGBitmapContextCreateImage(context); 

UIImage *backgroundGradient = [UIImage imageWithCGImage:cgImage]; 
[view setBackgroundColor:[UIColor colorWithPatternImage:backgroundGradient]]; 

CFRelease(colors); 
CGGradientRelease(gradient); 
CGImageRelease(cgImage); 
CGColorSpaceRelease(colorSpace); 
CGContextRelease(context); 
return view; 

Я считаю, что что-то может быть неправильно с выделением контекста, так как созданные образы возвращаются желаемого размера (315x44). Что я упустил? Что еще я могу проверить, чтобы помочь мне отладить эту проблему?

+0

Почему вы не хотите, чтобы создать подкласс? –

ответ

0

Это не так, как вы получите CGColorRef вам нужно сделать

[UIColor redColor].CGColor 
+0

Это еще одна проблема - я получаю сбой (используя ARC) на этих линиях. Не знаю, почему. – Eimantas

+0

Вам не нужен этот листинг '(__bridge CGColorRef)'. Также проверьте ответ на потенциальную проблему ARC. Http://stackoverflow.com/questions/8155844/cg-gradient-runs-on-simulator-but-not-on-iphone –