2015-02-06 8 views
6

In Paintcode 2, ho un cerchio all'interno di una cornice all'interno di una tela.PaintCode: Circle Mantiene A/R?

I vincoli sul cerchio sono impostate in questo modo:

enter image description here

Per ottenere il cerchio di dimensioni fino e non diventare un'ellisse, devo

  1. Conoscere il rapporto di aspetto atteso
  2. Code it in Objective-C me

Esiste un modo per aggirare questo tipo di codice?

-(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]; 
} 
+0

perché stai cambiando l'origine del dato rect? e stai creando l'oggetto tramite codice o interfaceBuilder? – YuviGr

+0

si tratta di paintcode: http://www.paintcodeapp.com/ –

+0

sì, so che uso questa app in alcune delle mie app. intendo dove crei il cerchio? – YuviGr

risposta

4
  1. Creare una tela, 150x120
  2. Creare un'ellisse, 10, 10, 100, 100
  3. Creare una nuova variabile chiamata frame, tipo di rettangolo: 10, 10, 150, 100
  4. Creare una nuova espressione chiamato smallestSide: min(frame.height, frame.width)
  5. Esegui un'espressione chiamata position (sotto)
  6. trascinamento smallestSide di altezza e larghezza dell'ellisse
  7. trascinare il position alla posizione dell'ellisse


posizione (Expression)

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


uscita

- (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]; 
} 

NOTA: Ho avuto l'aiuto di Matt Dunik a PaintCode per capirlo, ma la soluzione è in realtà molto semplice.

+0

Ora lo sto facendo in modo leggermente diverso applicandolo a una cornice che racchiude l'ellisse (e altre forme) –