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