Domanda

Sto cercando di fare una domanda per disegnare forme sullo schermo toccandolo.

posso tracciare una linea da un punto ad un altro- ma cancella su ogni nuova estrazione.

Qui è il mio codice:

CGPoint location;
CGContextRef context;
CGPoint drawAtPoint;
CGPoint lastPoint;
-(void)awakeFromNib{
    //[self addSubview:noteView];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    location = [touch locationInView:touch.view];
    [self setNeedsDisplayInRect:CGRectMake(0, 0, 320, 480)];
}

- (void)drawRect:(CGRect)rect {
    context = UIGraphicsGetCurrentContext();
    [[UIColor blueColor] set];
    CGContextSetLineWidth(context,10);
    drawAtPoint.x =location.x;
    drawAtPoint.y =location.y;
    CGContextAddEllipseInRect(context,CGRectMake(drawAtPoint.x, drawAtPoint.y, 2, 2));
    CGContextAddLineToPoint(context,lastPoint.x, lastPoint.y);
    CGContextStrokePath(context);

    lastPoint.x =location.x;
    lastPoint.y =location.y;
}

Apprezzare il vostro aiuto -

Nir.

È stato utile?

Soluzione

Come avete scoperto, -drawRect è dove si visualizza il contenuto di una vista. Sarà solo 'vedere' sullo schermo ciò che si disegna qui.

Questo è molto più basso livello di qualcosa di simile a Flash in cui si potrebbe aggiungere un movieclip che contiene una riga sul palco e qualche tempo dopo aggiungere un altro clip filmato che contiene una linea per il palco e ora si vede - due linee!

Sarà necessario fare un certo lavoro e prdobably configurare qualcosa di simile ..

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

    UITouch *touch = [[event allTouches] anyObject]; 
    location = [touch locationInView:touch.view]; 

    [self addNewLineFrom:lastPoint to:location];

    lastPoint = location;

    [self setNeedsDisplayInRect:CGRectMake(0, 0, 320, 480)]; 
}

- (void)drawRect:(CGRect)rect {

    context = UIGraphicsGetCurrentContext();

    for( Line *eachLine in lineArray )
        [eachLine drawInContext:context];

}

Penso che si può vedere come carne questo fuori per quello che ti serve.

Un altro modo per avvicinarsi a questo è quello di utilizzare CALayers. Usando questo approccio voi non disegnare all'interno - - (void) drawRect a tutti - si aggiungere e rimuovere gli strati, disegnare quello che ti piace al loro interno, e la vista sarà gestirli compositing insieme e disegnare sullo schermo in base alle esigenze. Probabilmente più quello che stai cercando.

Altri suggerimenti

Ogni volta che drawRect si chiama, si inizia con una tabula rasa. Se non tenere traccia di tutto ciò che avete disegnato prima, al fine di richiamare di nuovo, poi si finisce solo disegnare l'ultimo colpo di un dito, e non uno qualsiasi dei vecchi. Si dovrà tenere traccia di tutti i tuoi colpi delle dita al fine di ridisegnare ogni volta drawRect è chiamato.

Invece di ridisegnare ogni linea, è possibile disegnare in un'immagine e poi basta visualizzare l'immagine nel metodo drawRect:. L'immagine si accumulano le linee per voi. Naturalmente, questo metodo rende annullare più difficile da attuare.

Da Guida Application Programming iPhone :

  

Utilizza l'UIGraphicsBeginImageContext   funzione per creare una nuova immagine-based   contesto grafico. Dopo aver creato questo   contesto, è possibile disegnare l'immagine   contenuti in esso e quindi utilizzare il   UIGraphicsGetImageFromCurrentImageContext   funzione di generare un'immagine in base   quello che hai disegnato. (Se lo si desidera, è possibile   anche continuare a disegnare e generare   altre immagini.) quando si è fatto   la creazione di immagini, utilizzare la   funzione di UIGraphicsEndImageContext   chiudere il contesto grafico. Se tu   preferiscono utilizzare core grafico, si può   utilizzare la funzione CGBitmapContextCreate   per creare un contesto grafica bitmap   e disegnare i contenuti di immagini in esso.   Una volta terminato il disegno, utilizzare il   funzione di CGBitmapContextCreateImage   creare un CGImageRef dal bitmap   contesto. È possibile disegnare il Core   immagine grafica direttamente o utilizzare questo   per inizializzare un oggetto UIImage.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top