Как получить доступ к свойству CGColor UIColor в CGContextSetFillColorWithColor?
CGContextSetFillColorWithColor(g, [UIColor greyColor].CGColor);
Я пытаюсь следовать книге О'Рейли "Разработка игр для iPhone", но на странице 73 главы 3 я получаю эту ошибку:
error: request for member 'CGColor' in something not a structure or union
Согласно странице с ошибками в книге, это неподтвержденные ошибки в книге. Каким функциональным кодом можно заменить эту строку?
дополнительные детали
Пример проекта можно скачать здесь.
Я столкнулся с ошибкой в функции рендеринга, следуя инструкциям книги со стр. 72 по стр. 73, чтобы создать класс gsMain (он отличается от примера проекта pg77) в функции рендеринга gsMain.m
Фрагмент кода, который книга дает инструкции для создания класса gsMain, выглядит следующим образом:
//gsMain.h
@interface gsTest : GameState { }
@end
//gsMain.m
@implementation gsMain
-(gsMain*) initWithFrame:(CGRect)frame andManager:(GameStateManager*)pManager
{
if (self = [super initWithFrame:frame andManager:pManager]) {
NSLog(@"gsTest init");
}
return self;
}
-(void) Render
{
CGContextRef g = UIGraphicsGetCurrentContext();
//fill background with gray
CGContextSetFillColorWithColor(g, [UIColor greyColor].CGColor); //Error Occurs here
CGContextFillRect(g, CGRectMake(0, 0, self.frame.size.width,
self.frame.size.height));
//draw text in black
CGContextSetFillColorWithColor(g, [UIColor blackColor].CGColor);
[@"O'Reilly Rules!" drawAtPoint:CGPointMake(10.0,20.0)
withFont:[UIFont systemFontOfSize:[UIFont systemFontSize]]];
}
-(void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
{
UITouch* touch = [touches anyObject];
NSUInteger numTaps = [touch tapCount];
//todo: implement touch event code here
}
@end
Chapter3_Example_p77 должен показывать результат упражнений со страниц 71 до 77, но он сильно отличается от данных инструкций, приведенных в 71 до 77. Следующий код представляет собой законченный, скомпилированный класс, загруженный по вышеуказанной ссылке.
//gsMain.h
#import <Foundation/Foundation.h>
#import "GameState.h"
@interface gsMain : GameState {
}
@end
// gsMain.m
// Example
// Created by Joe Hogue and Paul Zirkle
#import "gsMain.h"
#import "gsTest.h"
#import "Test_FrameworkAppDelegate.h"
@implementation gsMain
-(gsMain*) initWithFrame:(CGRect)frame andManager:(GameStateManager*)pManager {
if (self = [super initWithFrame:frame andManager:pManager]) {
//do initializations here.
}
return self;
}
- (void) Render {
[self setNeedsDisplay]; //this sets up a deferred call to drawRect.
}
- (void)drawRect:(CGRect)rect {
CGContextRef g = UIGraphicsGetCurrentContext();
//fill background with gray
CGContextSetFillColorWithColor(g, [UIColor grayColor].CGColor);
CGContextFillRect(g, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height));
//draw text in black.
CGContextSetFillColorWithColor(g, [UIColor blackColor].CGColor);
[@"O'Reilly Rules!" drawAtPoint:CGPointMake(10.0, 20.0) withFont:
[UIFont systemFontOfSize: [UIFont systemFontSize]]];
//fps display from page 76 of iPhone Game Development
int FPS = [((Test_FrameworkAppDelegate*)m_pManager) getFramesPerSecond];
NSString* strFPS = [NSString stringWithFormat:@"%d", FPS];
[strFPS drawAtPoint:CGPointMake(10.0, 60.0) withFont:[UIFont systemFontOfSize:
[UIFont systemFontSize]]];
}
//this is missing from the code listing on page 77.
-(void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
{
UITouch* touch = [touches anyObject];
NSUInteger numTaps = [touch tapCount];
if( numTaps > 1 ) {
[m_pManager doStateChange:[gsTest class]];
}
}
@end
3 ответа
Как насчет [ [ UIColor grayColor ] CGColor ]
?
Вы используете последнюю версию SDK? Я полагаю, ваш UIColor.h
заголовок имеет свойство для CGColor
? (Я бы проверил ваши настройки SDK - когда я открыл пример проекта, он был установлен на iOS 3.x)
В Swift 3.x: UIColor.gray.cgColor
Убедись, что ты #include <UIKit/UIKit.h>
,
И это -grayColor
не -greyColor
,
Я составил p77
пример для Simulator 3.1.3 и не сталкивался с какими-либо предупреждениями или ошибками компилятора.
Код:
- (void)drawRect:(CGRect)rect {
CGContextRef g = UIGraphicsGetCurrentContext();
//fill background with gray
CGContextSetFillColorWithColor(g, [UIColor grayColor].CGColor);
CGContextFillRect(g, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height));
//draw text in black.
CGContextSetFillColorWithColor(g, [UIColor blackColor].CGColor);
[@"O'Reilly Rules!" drawAtPoint:CGPointMake(10.0, 20.0) withFont:[UIFont systemFontOfSize:[UIFont systemFontSize]]];
//...
}
кажется, чтобы скомпилировать все в порядке. Возможно, вы могли бы указать, какой из трех примеров вы компилируете и для какой целевой версии ОС?