iPhone – Как создать прямоугольник изменяемого размера для обрезки изображений?

StackOverflow https://stackoverflow.com/questions/1971542

Вопрос

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

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

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

Это было полезно?

Решение

добавить в закладки мой вопрос что в точности то же самое.

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top