2009-12-28 4 views
5

У меня возникли проблемы с созданием повторно значимого прямоугольника для обрезки моих изображений. Я пытаюсь добиться чего-то вроде этой фотографии:iPhone - Как вы создаете изменяемый размер прямоугольника для обрезки изображений?

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

Ну, единственная проблема, я понятия не имею, где на самом деле начать. Мне нужен совет, как я могу добиться этого эффекта обрезки. Какую документацию я должен прочитать? Core Graphics или Quartz 2d? И то и другое? Я кодировал iPhone с момента выпуска, но я никогда не использовал основную графику и т. Д. Любая помощь или совет были бы очень оценены. Я буду бросать свой код здесь, пока я продвигаюсь, чтобы показать, как это делается, когда я его достигаю. :-) Кроме того, этот прямоугольный блок перемещается по экрану в UIImageView, что делает его более интересным. Спасибо за помощь, и я с нетерпением жду достижения этой цели.

+0

Здравствуйте может помочь вам наверняка просто взять посмотрите один раз: https://github.com/barrettj/BJImageCropper/network/members – RayofHope

+0

Привет, вы получили решение для этого? Я столкнулся с одной и той же проблемой. – ScarletWitch

+1

Если вы хотите сделать обрезку, как показано ниже, https://raw.github.com/yuyak/YKImageCropper/master/Example/screenshot.png затем используйте этот: https://github.com/yuyak/YKImageCropper – RayofHope

ответ

1

Закладка my question, который точно такой же.

Я добрался до области обрезки и показал правильную часть изображения, но работа с масштабированием scrollview - это незавершенная работа. в настоящее время у меня есть изображение и простой UIView, слоистый в UIScrollview, а затем вне scrollview и на более высоком уровне - это мой пользовательский UIView обрезки. Я реализовать методы штрихи дело с перетаскиванием его вокруг, а также 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)]; 
} 

Примечание: на мой взгляд кадрирование НЕ является потомком UIImageView, это просто UIView со ссылкой на подстилающей изображение с другой точки зрения.

«croppedImage» категория на UIImage и довольно просто:

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

Я реализовал несколько методов UIScrollViewDelegate и пройти через прокрутку активность, так что я могу держать мой взгляд кадрирования в синхронизации. Масштабирование также передается, но, как уже упоминалось, не работает по-прежнему.

Другой Примечание: Я не думаю, что это нужно тратить время генерации нового UIImage с обрезанной области каждый раз, как то же самое должно быть возможным с

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

Кварц - это «маркетинговый термин» для Core Graphics, и именно здесь вы должны начать. Вы хотите использовать UIView (полный пользовательский чертеж в -drawRect :), ловушку и отслеживать его штрихи, а затем нарисовать результат. Вы можете получить текущий контекст графики, используя UIGraphicsGetCurrentContext(). Этого должно быть достаточно, чтобы вы начали!

+0

Звучит неплохо, спасибо за начальный толчок. – 0SX

+0

действительно звучит хорошо, вы можете помочь с примером кода, чтобы сделать это – Marios

Смежные вопросы