2016-03-06 2 views
0

Я пытаюсь нарисовать E-образную штуковину, и насколько я знаю, есть два пути, чтобы один из них был дорогой.Рисование формы

Я мог бы рисовать с помощью пути, как предлагает приведенная ниже документация. https://developer.apple.com/library/ios/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/BezierPaths/BezierPaths.html

Или я мог бы создать прямоугольник с UIView и вырезать его с помощью 2 маленьких квадратов и сделать E, вычитая эти 2 пятна.

Я не уверен, какой путь - путь к рассмотрению эффективности и всего. Если есть другие лучшие способы, пожалуйста, просветите меня. Благодаря!

(я нашел много о рисовании фигуры здесь, но ни один не является даже отдаленно недавно, и я хотел бы недавний ответ)

ответ

1

Один из немногих возможных способов:

  1. Создать подкласс UIView.
  2. Комплект CAShapeLayer в качестве защитного слоя вашего UIView.
  3. Настройте UIBezierPath, добавив строки, чтобы отразить вашу E-образную форму.
  4. Назначение: UIBezierPath CGPath Недвижимость CAShapeLayer's path.
  5. Добавить свой просмотр, чтобы просмотреть иерархию.

Другое:

  1. Создайте подкласс UIView.
  2. Override drawRect способ.
  3. Добавить фигуры/линии в контекст рисования, чтобы отразить вашу E-образную форму.
  4. Добавить свой просмотр, чтобы просмотреть иерархию.

Первое решение IMHO будет более эффективным, но я обычно перехожу во второй.

0

Если вы не хотите использовать пути Безье, вы можете нарисовать букву на виду:

CGContextRef context = UIGraphicsGetCurrentContext(); 

    // Text Drawing 
    CGRect textRect = CGRectMake(CGRectGetMinX(frame) + 52, CGRectGetMinY(frame) + 26, 17, 21); 
    { 
     NSString* textContent = @"E"; // You can draw any letter , just replace this! 
     NSMutableParagraphStyle* textStyle = NSMutableParagraphStyle.defaultParagraphStyle.mutableCopy; 
     textStyle.alignment = NSTextAlignmentCenter; 

     NSDictionary* textFontAttributes = @{NSFontAttributeName: [UIFont systemFontOfSize: UIFont.labelFontSize], NSForegroundColorAttributeName: UIColor.blackColor, NSParagraphStyleAttributeName: textStyle}; 

     CGFloat textTextHeight = [textContent boundingRectWithSize: CGSizeMake(textRect.size.width, INFINITY) options: NSStringDrawingUsesLineFragmentOrigin attributes: textFontAttributes context: nil].size.height; 
     CGContextSaveGState(context); 
     CGContextClipToRect(context, textRect); 
     [textContent drawInRect: CGRectMake(CGRectGetMinX(textRect), CGRectGetMinY(textRect) + (CGRectGetHeight(textRect) - textTextHeight)/2, CGRectGetWidth(textRect), textTextHeight) withAttributes: textFontAttributes]; 
     CGContextRestoreGState(context); 
    } 

подклассе UIView и включить этот код в методе DrawRect.

Смежные вопросы