2009-12-28 6 views
5

Ho difficoltà a creare un rettangolo ridimensionabile per ritagliare le mie immagini. Sto cercando di realizzare qualcosa di simile questa immagine:iPhone - Come si crea un rettangolo ridimensionabile per il ritaglio delle immagini?

http://img192.imageshack.us/img192/8930/customcropbox.jpg

Ebbene, l'unico problema è che non ho idea da dove cominciare davvero. Ho bisogno di un consiglio su come posso ottenere questo effetto del ritaglio. Di quale documentazione dovrei leggere? Core Graphics o Quartz 2d? Entrambi? Ho programmato l'iPhone sin dalla sua data di rilascio, ma non ho mai utilizzato la grafica di base e così via. Qualsiasi aiuto o consiglio sarebbe molto apprezzato. Getterò il mio codice qui mentre progredisco per mostrare come è fatto quando lo raggiungo. :-) Inoltre, questa scatola rettangolare è mobile attraverso lo schermo in un UIImageView che lo rende ancora più interessante. Grazie per l'aiuto e non vedo l'ora di raggiungere questo obiettivo.

+0

Ciao può aiutare di sicuro basta prendere un'occhiata una volta: https://github.com/barrettj/BJImageCropper/network/members – RayofHope

+0

Ciao, hai trovato una soluzione per questo? Sto affrontando esattamente lo stesso problema. – ScarletWitch

+1

Se si desidera eseguire il ritaglio come nell'immagine sottostante https://raw.github.com/yuyak/YKImageCropper/master/Example/screenshot.png quindi utilizzare questo: https://github.com/yuyak/YKImageCropper – RayofHope

risposta

1

segnalibro my question che è esattamente lo stesso.

Mi sono spinto fino a spostare la mia vista di ritaglio e farlo mostrare la parte dell'immagine correttamente, ma occuparsi dello zoom di scrollview è un work in progress. attualmente ho una visione d'immagine e una semplice UIView stratificata in UIScrollview, quindi all'esterno della scrollview e ad un livello superiore è il mio ritaglio personalizzato di UIView. A implementare i metodi tocchi per affrontare trascinandolo in giro, e anche drawRect:

- (void)drawRect:(CGRect)rect { 
    // Drawing code 
    if(self.image == nil) 
     return; 

    CGPoint offset = scrollView.contentOffset; 
    clipRect = CGRectOffset(self.frame, offset.x, offset.y); 

    UIImage *croppedImage = [image croppedImage:clipRect]; 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    [croppedImage drawAtPoint:CGPointMake(0, 0)]; 
} 

Nota: mio punto di vista il ritaglio non è un discendente di UIImageView, è solo UIView con un riferimento all'immagine sottostante dall'altro punto di vista.

"croppedImage" è una categoria a UIImage e piuttosto semplice:

@implementation UIImage (Resize) 
- (UIImage *)croppedImage:(CGRect)bounds { 
    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds); 
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef); 
    return croppedImage; 
} 
... 
@end 

Ho implementato alcuni dei metodi UIScrollViewDelegate e passare attraverso l'attività di scorrimento in modo da poter mantenere il mio punto di vista il ritaglio in sincronia. Anche lo zoom è passato, ma come detto non funziona ancora come desiderato.

un'altra nota: Non credo che sia necessario sprecare il tempo che genera una nuova UIImage con l'area ritagliata ogni volta come lo stesso dovrebbe essere possibile con

CGImageRef imageRef = CGImageCreateWithImageInRect([yourImage CGImage], bounds); 
and 
CGContextDrawImage(ctx, clipRect, imageRef); 
1

Quartz è il "termine di marketing" per la grafica principale, ed è qui che devi iniziare. Ti consigliamo di utilizzare un UIView (disegno personalizzato completo in -drawRect :), trap e tracciare i suoi tocchi, e quindi disegnare il risultato. È possibile ottenere il contesto grafico corrente utilizzando UIGraphicsGetCurrentContext(). Questo dovrebbe essere sufficiente per iniziare!

+0

Sembra buono, grazie per la spinta iniziale. – 0SX

+0

suona davvero bene puoi aiutare con codice di esempio per farlo – Marios