2012-02-07 7 views
0

Я пытаюсь нарисовать изображение в подкласс UIView, переопределяя drawRect. Этот класс рисования изображений требует возможности перемещения и масштабирования, поэтому я сделал его подвид прокрутки.drawRect обрезка в UIScrollView

Моя проблема заключается в том, что мое изображение, кажется, обрезается либо по экрану, либо по scrollView (изображение больше, чем на экране). У меня нет подсказки, почему это кажется довольно простым.

Иерархия зрения в моем ViewController выглядит следующим образом:

View Controller 
    View 
    ScrollView 
     MapView 

Я создал точки для вида прокрутки и просмотр карты (который является видом реализации DrawRect).

Моего ViewController исходный код для конфигурирования вида прокрутки установки выглядит следующим образом:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    scrollView.delegate = self; 
    scrollView.contentSize = CGSizeMake(450, 476); 
    scrollView.minimumZoomScale = 0.6; 
    scrollView.maximumZoomScale = 6.0; 
} 

Моей реализация DrawRect:

- (void)drawRect:(CGRect)rect 
{ 
    UIImage *myImage = [UIImage imageNamed:@"map.jpg"]; 
    CGRect rectangle = CGRectMake(0,0,450,476); 
    [myImage drawInRect:rectangle]; 
} 

Изображение перетаскиваемое и масштабируемое в представлении прокрутки, но это обрежется на том, что, по-видимому, является границей экрана.

Любая помощь будет оценена по достоинству.

ответ

0

drawRect не может рисовать вне прямоугольника, передаваемого в качестве параметра методу drawRect, который определяется рамкой просмотра. Сделайте свой вид 1200,1200 и убедитесь, что clipToBounds отключен во всех содержащихся представлениях.

+0

Итак, я думаю, это то, что делает рамка моего представления. Спасибо за информацию, что имеет смысл. – mat

+0

Да, точно. Установите рамку представления (на самом деле это техническая форма view.bounds, но они обычно одинаковы), а drawRect рисует содержимое этого фрейма. –

0

Ваша проблема, вероятно, в drawInRect. Из документации класса UIImage:

drawInRect: 
Draws the entire image in the specified rectangle, scaling it as needed to fit. 

сделать этот прямоугольник, больше, как вы хотите, и в центре его в UIImageView. На этот вопрос можно ответить UIScrollView image/photo viewer with paging enabled and zooming

+0

Привет, спасибо за ваш ответ. Но если я изменю код на CGRect rectangle = CGRectMake (0,0,1200,1200); он все еще обрезается. Мои прямоугольные размеры в размещенном коде - это фактические размеры изображения. – mat

+0

Взгляните на ссылку, которую я разместил выше. Существует пример кода и видео WWDC, как сделать все приложение для фотографий из яблока. Просматривайте для перемещения и масштабирования. –

+0

Хорошо, используя ваши ссылки Я понял, мне нужно было установить рамку для моего mapView, используя: CGRect mapFrame; mapFrame.origin = CGPointMake (0, 0); mapFrame.size = CGSizeMake (450, 476); mapView.frame = mapFrame; – mat

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