Pergunta

Estou tendo um problema em fazer um retângulo revertível para cortar minhas imagens. Estou tentando alcançar algo como esta foto:

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

Bem, o único problema é que não tenho idéia de onde realmente começar. Preciso de alguns conselhos sobre como posso alcançar esse efeito do corte. Em que documentação devo ler? Gráficos principais ou quartzo 2D? Ambos? Eu tenho codificado para o iPhone desde a data de lançamento, mas nunca usei gráficos principais e etc. Qualquer ajuda ou conselho seria muito apreciado. Vou jogar meu código aqui enquanto progride para mostrar como é feito quando o conseguir. :-) Além disso, esta caixa retangular é móvel na tela em um UIImageView, o que a torna mais interessante. Obrigado pela ajuda e estou ansioso para alcançar esse objetivo.

Foi útil?

Solução

Marque meu pergunta o que é exatamente o mesmo.

Eu cheguei a me aprofundar na minha visão de corte e, com a parte da imagem corretamente, mas lidar com o zoom do rollView é um trabalho em andamento. Atualmente, tenho uma visualização de imagem e uiview simples em camadas no UIScrollView, depois fora do scrollView e, em um nível mais alto, é o meu UIView de corte personalizado. Implementei os métodos de toques para lidar com arrastá -lo e também 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: Minha visão de corte não é descendente do UiImageView, é apenas uma visualização com uma referência à imagem subjacente da outra visão.

"CroppedImage" é uma categoria em UIImage e bem simples:

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

Implementei alguns dos métodos UIScrollViewDelegate e passe pela atividade de rolagem para que eu possa manter minha visão de corte em sincronia. O zoom também está repassado, mas como mencionado, ainda não está funcionando como desejado.

Outra nota: não acho que seja necessário perder o tempo gerando uma nova uiimage com a área cortada toda vez que o mesmo deve ser possível com

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

Outras dicas

O quartzo é o 'termo de marketing' para os gráficos principais, e é aí que você deve começar. Você deseja usar um UIVIEW (desenho personalizado completo em -Drawrect :), armadilha e rastreie seus toques e depois desenhe o resultado. Você pode obter o contexto gráfico atual usando o uigraphicsgetCurrentContext (). Isso deve ser suficiente para você começar!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top