PaintCode: Circle поддерживает A/R?

В Paintcode 2 у меня есть круг внутри рамки внутри холста.

Ограничения на круг устанавливаются следующим образом:

введите здесь описание изображения

Чтобы круг увеличился и не стал эллипсом, мне нужно

  1. Знайте ожидаемое соотношение сторон
  2. Сам кодируй на Objective-C

Есть ли способ обойти этот тип кода?

-(void)drawRect:(CGRect)rect {
    if (rect.size.width > rect.size.height) {
        rect.origin.x = (rect.size.width - rect.size.height) * .5f;
        rect.size.width = rect.size.height;
    } else {
        rect.origin.y = (rect.size.height - rect.size.width) * .5f;
        rect.size.height = rect.size.width;
    }
    NSLog(@"Frame=%@", NSStringFromCGRect(rect));
    [CircleDraw drawCircleWithFrame:rect];
}

person Dan Rosenstark    schedule 06.02.2015    source источник
comment
почему вы меняете происхождение данного прямоугольника? и вы создаете объект с помощью кода или interfaceBuilder?   -  person YYfim    schedule 07.02.2015
comment
это о коде краски: paintcodeapp.com   -  person Dan Rosenstark    schedule 07.02.2015
comment
да, я знаю, что использую это приложение в некоторых своих приложениях. я имею в виду, где вы создаете круг?   -  person YYfim    schedule 07.02.2015
comment
Все это делается внутри кода рисования, но uiview динамически меняет размер.   -  person Dan Rosenstark    schedule 07.02.2015
comment
Я тоже ответил ниже... спасибо!   -  person Dan Rosenstark    schedule 07.02.2015
comment
ооо не видел..прикольно :)   -  person YYfim    schedule 07.02.2015


Ответы (1)


  1. Создайте холст, 150x120
  2. Создайте эллипс, 10, 10, 100, 100
  3. Создайте новую переменную с именем frame, введите прямоугольник: 10, 10, 150, 100
  4. Создайте новое выражение с именем наименьшая сторона: min(frame.height, frame.width)
  5. Создайте выражение под названием position (ниже)
  6. Перетащите smallestSide на высоту и ширину эллипса
  7. Перетащите position в положение эллипса


позиция (выражение)

 makePoint(
    frame.x+(frame.width-smallestSide)*0.5,
    frame.y+(frame.height-smallestSide)*0.5
)


результат

- (void)drawCanvas1WithFrame: (CGRect)frame
{

    //// Variable Declarations
    CGFloat smallestSide = MIN(frame.size.height, frame.size.width);
    CGPoint position = CGPointMake(frame.origin.x + (frame.size.width - smallestSide) * 0.5, frame.origin.y + (frame.size.height - smallestSide) * 0.5);

    //// Oval Drawing
    UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(position.x, position.y, smallestSide, smallestSide)];
    [UIColor.grayColor setFill];
    [ovalPath fill];
}

ПРИМЕЧАНИЕ. Мне помог Мэтт Дуник из PaintCode, чтобы понять это, но решение на самом деле очень простое.

person Dan Rosenstark    schedule 07.02.2015
comment
Теперь я делаю это немного по-другому, применяя все это к фрейму, который окружает эллипс (и другие фигуры). - person Dan Rosenstark; 11.02.2015