Как нарисовать подпись линиями на экране iPhone?
-
22-08-2019 - |
Вопрос
Я хочу разрешить пользователю рисовать подпись на экране iPhone, поэтому я добавляю подкласс UIView и добавляю некоторый код к его методу 'touchesMoved'.
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
firstTouch = [touch locationInView:self];
CGSize mySize = CGSizeMake(5, 5);
UIGraphicsBeginImageContext(mySize);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextBeginPath(ctx);
CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);
CGContextAddRect(ctx, CGRectMake(0, 0, 5, 5));
CGContextFillPath(ctx);
UIImage *redRect = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *redRectView = [[UIImageView alloc] initWithImage:redRect];
redRectView.center = CGPointMake(firstTouch.x, firstTouch.y);
[self addSubview:redRectView];
}
Я рисую его маленькими прямоугольниками, и получается точка за точкой.Поскольку это слишком некрасиво, я хочу нарисовать подпись линиями.Но как отличить firstTouch от lastTouch?Если я использую только метод 'touchesMoved', я могу получить только одну точку касания.
Решение
В соответствии с Ссылка на класс пользовательского интерфейса, вам также нужно будет реализовать
– touchesBegan:withEvent:
и
– touchesEnded:withEvent:
.
После реализации этих методов вы должны быть в состоянии получить достаточно данных для реализации контурной кривой Безье или другого подходящего решения.
[Редактировать] Возможно, лучшим решением было бы получить штрихи непосредственно из UIEvent
возражайте, как только ваш контроллер получит
– touchesMoved:withEvent:
уведомление.Кроме того, в Пример кода GLPaint также может оказаться полезным.
Другие советы
Поскольку пример кода GLPaint может быть слишком сложным для начинающих, я нахожу этот учебник.Он прост в освоении для большинства начинающих.
Имейте в виду, что подпись, написанная пальцем, будет отличаться от подписи, сделанной с помощью пишущего инструмента.Возможно, вам захочется переосмыслить, для чего вы используете подпись, и является ли она такой обязательной, какой вам нужно.