Я пытаюсь реализовать очень простую анимацию рисования линии для моего iPhone-приложения. Я хотел бы нарисовать прямоугольник на моем представлении после задержки. Я использую performSelector
для запуска моего метода рисования.Простая анимация с помощью отложенного рисунка
-(void) drawRowAndColumn: (id) rowAndColumn
{
int rc = [rowAndColumn intValue];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
CGRect rect = CGRectMake(rc * 100, 100, 100, 100);
CGContextAddRect(context, rect);
CGContextDrawPath(context, kCGPathFillStroke);
}
, который затем вызывается через:
int col = 10;
[self performSelector:@selector(drawRowAndColumn:)
withObject:[NSNumber numberWithInt:col]
afterDelay:0.2];
Но, кажется, что, когда drawRowAndColumn:
сообщение действительно отправлено, оно больше не имеет доступа к действительному CGContextRef
, как я получаю ошибки, такие как:
<Error>: CGContextAddRect: invalid context
Если я заменяю performSelector
прямым звонком на drawRowAndColumn
, он отлично работает. Поэтому моя первая идея состояла в том, чтобы передать также CGContextRef
через performSelector
, но я не могу понять, как передать несколько аргументов одновременно (это еще один хороший вопрос.)
Что не так с вышеуказанным кодом?
Я знал, что это было просто, спасибо! –
Что такое * хороший способ сделать анимацию? – mk12
Использование Core Animation, или более высокоуровневая оболочка на основе UIView. Вот о чем говорил последний абзац в моем ответе (блок анимации UIView). Вы запускаете блок анимации, устанавливаете некоторые свойства UIView, затем фиксируете анимацию, а изменения свойств будут анимированы (вы можете контролировать время и т. Д.). – philsquared