Я подклассифицировал UIView, чтобы нарисовать линию, которая меняет позицию каждую секунду. Я использую NSTimer для вызова setNeedsDisplay, чтобы обновить представление, но результаты неверны. Он рисует старые и новые линии. Вот мой LineView.h/м Код:Перерисование UIView с использованием NSTimer не работает как ожидалось
LineView.h:
@interface LineView : UIView
@property(nonatomic, assign) int length;
@end
LineView.m:
#import "LineView.h"
@implementation LineView
- (void)setLength:(int)length {
_length = length;
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect {
UIBezierPath *line = [UIBezierPath bezierPath];
[line moveToPoint:CGPointMake(10, 10)];
[line addLineToPoint:CGPointMake(100, 100+_length)];
line.lineWidth = 10;
[[UIColor blueColor] setStroke];
[line stroke];
}
@end
В моем файле ViewController.m, в viewDidLoad, я инициализации lineView и запуск таймера:
- (void)viewDidLoad {
[super viewDidLoad];
_length = 100;
_lineView = [[LineView alloc]initWithFrame:self.view.bounds];
_lineView.length = _length;
[self.view addSubview:_lineView];
_timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime:) userInfo:nil repeats:true];
}
- (void)updateTime:(NSTimer*)timer {
_length += 20;
self.lineView.length = _length;
}
Я хочу сделать это все программно и не использовать раскадровки или xibs. Если я подклассифицирую представление в раскадровке и создаю для него выход, то представление будет обновлено правильно, но я хочу избежать касания раскадровки.
@rmaddy, который ничего не сделает. [Согласно документам Apple] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/index.html#//apple_ref/occ/instm/UIView/drawRect :), "* По умолчанию реализация этого метода ничего не делает. Подклассы, которые используют такие технологии, как Core Graphics и UIKit, чтобы нарисовать контент своего представления, должны переопределить этот метод и реализовать там свой код рисования. * « – Hamish
@ originaluser2 Да. Я просто просмотрел некоторые из моего кода, и ни один из методов 'drawRect:' не вызывает '[super drawRect:]'. Неважно. – rmaddy