Получить контекст из UIImageView - PullRequest
3 голосов
/ 17 ноября 2009

Могу ли я получить контекст (CGContextRef) из UIImageView?

Подробно: у меня есть ссылка контроллера на файл xib. В IB я добавил UIImageView и ссылаюсь на него:

IBOutlet UIImageView *imageView;

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

До этого, если я использую:

CGContextRef context = UIGraphicsGetCurrentContext();

выход:

<Error>: CGContextTranslateCTM: invalid context

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

Ответы [ 2 ]

3 голосов
/ 17 ноября 2009

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

Затем метод должен начинаться с чего-то подобного, чтобы дать вам ссылку на контекст:

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

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

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

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

Особые замечания

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

2 голосов
/ 07 августа 2012

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

 UIGraphicsBeginImageContext(self.frame.size); 
 CGContextRef context = UIGraphicsGetCurrentContext();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...