2009-11-17 1 views
3

Можно ли получить контекст (CGContextRef) от существующего UIImageView?Получить контекст из UIImageView

Деталь: У меня есть ссылка для контроллера на файл xib. В IB я добавил UIImageView и ссылаться на ИТС:

IBOutlet UIImageView *imageView; 

Теперь, в viewDidLoad Как получить UIImageView контекст (CGContextRef)?

Перед этим, если я использую:

CGContextRef context = UIGraphicsGetCurrentContext(); 

выход:

<Error>: CGContextTranslateCTM: invalid context 

предлагаешь?

+0

Что вы хотите сделать с контекстом? Контексты действительны только при их создании самостоятельно или в контексте (извините) вызова drawRect:. –

ответ

3

Если вы хотите использовать свои собственные методы рисования, вы должны применить их в методе drawRect: UIView. Вам нужно подклассифицировать UIView для создания собственной логики рисования. В XCode используйте File-> New File и выберите UIView в качестве шаблона, который предоставит вам базовую структуру. В Interface-Builder вы можете сначала добавить новое представление, а затем установить его с помощью своего класса под вкладкой Identity в окне Inspector.

метод должен начать с чем-то вроде этого, чтобы дать вам ссылку на контекст:

- (void)drawRect:(CGRect)fr { 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    ... DRAWING CODE ... 
} 

Этот метод автоматически вызывается при первом отображении представления. Если ваша логика зависит от некоторых переменных, вы должны вызывать setNeedsDisplay на UIView, чтобы позволить повторному просмотру логики рисования.

Однако, это не будет работать на UIImageView (LINK):

подклассов Примечания

Особые соображения

Класс UIImageView оптимизирован, чтобы привлечь его изображений дисплей. UIImageView не будет вызывать drawRect: подкласс. Если вашему подклассу нужен специальный код рисования, рекомендуется использовать UIView в качестве базового класса.

2

Добавить вызов UIGraphicsBeginImageContext (self.frame.size); перед UIGraphicsGetCurrentContext(); Он будет работать.

UIGraphicsBeginImageContext(self.frame.size); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
+0

Большое спасибо !!!! –