Я разделил UIImageView на подклассы и попытался переопределить drawRect, таким образом, я мог потянуть сверху изображения с помощью 2D Кварца. Я знаю, что это - немой вопрос о новичке, но я не вижу то, что я сделал неправильно. Вот интерфейс:
#import <UIKit/UIKit.h>
@interface UIImageViewCustom : UIImageView {
}
- (void)drawRect:(CGRect)rect;
@end
И реализация:
#import "UIImageViewCustom.h"
@implementation UIImageViewCustom
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
}
return self;
}
- (void)drawRect:(CGRect)rect {
// do stuff
}
- (void)dealloc {
[super dealloc];
}
@end
Я установил точку останова на drawRect
и это никогда не совершает нападки, ведя меня, чтобы думать, что в это никогда не заходят все. Разве это не предположено быть названным, когда представление сначала загружается? Разве я неправильно переопределил его?
Он будет вызываться только в том случае, если представление является видимым и грязным. Может быть, проблема в коде, который создает представление, или в вашем Nib, если вы его создаете именно так?
Иногда вы также можете увидеть, что точки останова не устанавливаются должным образом, если вы пытаетесь отладить " Выпуск "сборка.
Я как-то пропустил первый раз, когда вы создаете подкласс UIImageView. Из документации:
Особые соображения
Класс UIImageView оптимизирован для вывода своих изображений на дисплей. UIImageView не будет вызывать drawRect: в подклассе . Если вашему подклассу требуется код пользовательского рисования, рекомендуется использовать UIView в качестве базового класса.
Итак, вот оно. Учитывая, насколько легко нарисовать изображение в вашем представлении с помощью [UIImage drawInRect:] или с помощью CALayer, вероятно, в любом случае нет веских причин для создания подкласса UIImageView.
Попробуйте добавить
Edit:
- (id)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
[self setClearsContextBeforeDrawing:YES];//add this line also
}
return self;
}
- (void)setNeedsDisplay{
[self setNeedsDisplayInRect:self.frame];
}
в ваш код.
Надеюсь, это поможет.
Thanks,
madhup
Не отвечает напрямую на ваш вопрос, но может решить вашу проблему:
Почему это нужно делать с подклассом UIImageView? Создание подклассов всегда может быть проблематичным, особенно для классов, которые не предназначены для создания подклассов - и я уверен, что UIImageView - нет. Если вы просто хотите нарисовать что-то поверх изображения, создайте представление с прозрачным фоном, нарисуйте все, что хотите, и поместите его прямо поверх изображения.