2012-02-17 4 views
0
CGSize cgs = CGSizeMake(250.0, 300.0); 
    UIGraphicsBeginImageContext(cgs);  
    CGRect rectangle = CGRectMake(0,0,cgs.width,cgs.height); 
    UIImage *myImage = [UIImage imageNamed:@"BMW.jpg"]; 

    [myImage drawInRect:rectangle];  
    [myImage release]; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(context, 5.0); 
    CGContextSetRGBStrokeColor(context, 0.0, 0.0, 1.0, 1.0); 
    CGContextStrokeRect(context, rectangle); 

    UIImage *testImg = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    [testImg drawAtPoint:CGPointMake(35, 10)]; 

Я хочу дать промежуток между границами изображения и прямоугольника, в котором изображено изображение, например 5 слева 5 сверху и 5 справа, но около 30 на дне, поскольку его пространство для текста, которое пользователь будет писать, и пользователь может также выбрать, что он хочет текст сверху, поэтому в этом случае верхний зазор будет равен 30, а нижний зазор будет равен 5. Вот код, который он находится внутри подкласса uiview в методе drawrect.манипуляция изображения с использованием quartz2d

используя этот код границы и изображение плотно связаны вместе, я не могу дать разрыв между границей и изображением. Любая идея, как я могу это сделать?

Заранее спасибо.

enter image description here

ответ

2

Прежде всего, у вас есть серьезная ошибка. Эта линия неправильно:

[myImage release]; 

Вы не владеете myImage, так что вы должны не релиз это. Вы должны прочитать «Правила управления памятью» в Cocoa Core Competencies. Или вы должны включить ARC (автоматический подсчет ссылок), а затем компилятор позаботится о том, чтобы выпустить что-то для вас. Поскольку ARC поддерживается с iOS 4.0, вы почти наверняка будете использовать его, если будете разрабатывать новое приложение.

Что касается рисунка изображения, вам просто нужно изменить прямоугольник, в котором вы рисуете изображение. Например, вы можете оставить 5 пиксельную границу сверху, слева и справа, а также границы с 30 пунктов на дне, как это:

CGRect imageRect = CGRectInset(rectangle, 5, 5); // move 5 points in on all sides 
imageRect.size.height -= 25; // make it another 25 points shorter 
[myImage drawInRect:imageRect]; 

Если вы хотите границу 30 пунктов на вершине, вы также должны изменить imageRect.origin.y.

+1

+1 для ссылки на основные ресурсы какао. – Vignesh

+0

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

+1

Я сказал, что вы должны изменить прямоугольник, который вы используете, чтобы нарисовать * изображение *. Я не сказал, что вы должны изменить прямоугольник, который вы используете, чтобы нарисовать * границу *. Как вы думаете, почему я создал новую переменную с именем 'imageRect'? –

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