2013-07-31 3 views
1

У меня есть код, который позволяет мне рисовать поверх UIImageView - но я хочу, чтобы иметь возможность ограничить область рисования.iOS: Перестановка UIGraphicsBeginImageContext и UIImageView

Я был в состоянии ограничить размер, но теперь я не могу расположить его: если я изменить (0, 0) к чему-то мое изображение исчезло полностью и способности к рисованию перестает работать

DrawImage - это UIImageView

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    mouseSwiped = YES; 

    UITouch *touch = [touches anyObject]; 
    currentPoint = [touch locationInView:self]; 

    UIGraphicsBeginImageContext(CGSizeMake(560, 660)); 
    [drawImage.image drawInRect:CGRectMake(0, 0, 560, 660)]; 

    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0); 
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0, 1, 0, 1); 
    CGContextBeginPath(UIGraphicsGetCurrentContext()); 
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); 
    CGContextStrokePath(UIGraphicsGetCurrentContext()); 

    [drawImage setFrame:CGRectMake(0, 0, 560, 660)]; 
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    lastPoint = currentPoint; 

    [self addSubview:drawImage]; 
} 

любая помощь очень высоко ценится

ответ

1

Я не уверен, я полностью понимаю, что вы пытаетесь сделать, но я возьму качели:

[drawImage.image drawInRect:CGRectMake(0, 0, 560, 660)]; 

Это указывает изображению, присвоенному drawImage, для рисования в текущем контексте на 0,0. Поскольку контекст представляет собой контекст растрового изображения, его размер будет от 0,0 до 560,660. Мне кажется, что это, вероятно, то, что вы хотите сделать, иначе у вас будут пустые области в вашем растровом изображении. Если бы вы изменили это значение 0,0 на 10,0, я бы ожидал, что в полученном растровом изображении будет пустое пространство шириной 10pt (что кажется пустой тратой).

Позже вы делаете это:

[drawImage setFrame:CGRectMake(0, 0, 560, 660)]; 

Это устанавливает координаты UIImageView в координатной системе его SuperView в. Если вы измените , то0,0, скажем, 5,5 Я бы ожидал, что ваш UIImageView появится 5pt вниз и 5pt вправо в своем супервизоре.

Вы говорите, что хотите «ограничить область рисования». Я предполагаю, что вы имеете в виду ту часть, где вы рисуете изображение. Самый простой способ сделать это - установить прямой клип в контексте растрового изображения, прежде чем рисовать. Например, если вы хотите, чтобы предотвратить рисунок в 10pt полосы вокруг краев изображения, вы могли бы сделать это так:

UIGraphicsBeginImageContext(CGSizeMake(560, 660)); 
[drawImage.image drawInRect:CGRectMake(0, 0, 560, 660)]; 

CGContextClipToRect(UIGraphicsGetCurrentContext(), CGRectMake(10,10,540,640)); 
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
// ... and so on 

Не 100% уверен, что это то, что вы ищете, но, надеюсь, помогает.

+0

танки много для объяснения: –

1

попытка путем ограничения currentPoint

if (currentPoint.x <= 20 || currentPoint.x >= 280 ||  
    currentPoint.y <= 20 || currentPoint.y >= 400) 
{ 
    lastPoint = currentPoint; 
    return; 
} 
Смежные вопросы