2010-06-09 3 views
1

У меня есть приложение на iPhone с UIViewController с некоторыми материалами внутри. Image, textbox и т. Д. есть способ нарисовать линию или что-то вроде этого, используя opengl непосредственно внутри UIViewController ?Нарисуйте линию над UIViewController

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

+0

Зачем вам OpenGL просто рисовать линию? Почему бы просто не использовать UIView? –

+0

и как я могу нарисовать линию в UIViewController над изображением, например? – ghiboz

ответ

6

Вы уверены, что OpenGL?

Я считаю, что OpenGL будет невозможно использовать над обычными видами.

Вы можете добавить пользовательский вид (наследовать от UIView) выше всех других видов и нарисовать все, что захотите, в этом представлении.
Этот вид должен иметь прозрачный цвет фона.
Кроме того, если вы хотите взаимодействовать с другими видами (нажмите кнопки, отредактируйте текстовые представления, прокрутите и т. Д.), Вам нужно будет реализовать метод hitTest в своем пользовательском представлении, чтобы передать событие касания в представления, которые находятся под этим ...

EDIT: Не вступайте в хит-тест. Просто снимите взаимодействие пользователя Enabled в XIB ...

EDIT: Пример кода:

@interface TransparentDrawingView : UIView { 
    CGPoint fromPoint; 
    CGPoint toPoint; 
} 
- (void)drawLineFrom:(CGPoint)from to:(CGPoint)to; 
@end 

@implementation TransparentDrawingView 

- (void)initObject { 
    // Initialization code 
    [super setBackgroundColor:[UIColor clearColor]]; 
} 
- (id)initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) { 
     // Initialization code 
     [self initObject]; 
    } 
    return self; 
} 
- (id)initWithCoder:(NSCoder *)aCoder { 
    if (self = [super initWithCoder:aCoder]) { 
     // Initialization code 
     [self initObject]; 
    } 
    return self; 
} 

- (void)drawRect:(CGRect)rect { 
    // Drawing code 

    // Draw a line from 'fromPoint' to 'toPoint' 
} 
- (void)drawLineFrom:(CGPoint)from to:(CGPoint)to { 
    fromPoint = from; 
    toPoint = to; 

    // Refresh 
    [self setNeedsDisplay]; 
} 

@end 
+0

Спасибо Michael ... Моя цель - нарисовать линию над изображением, например .. спасибо – ghiboz

+1

См. Образец кода, который я добавил в свой ответ. Используйте это представление как свое собственное представление, которое будет распространено на все окно над остальными видами. Заполните код чертежа в методе 'drawRect:' ... –

1

Сначала я думаю, что вы должны знать обязанности UIView и UIViewController. UIView в основном отвечает за рисование (отменяет touchBegin, ToucheMove и т. Д.), Анимирует, управляет областями и обрабатывает событие; UIViewController в основном отвечает за загрузку, разгрузку просмотров и т. Д.

Итак, вы должны «нарисовать» эту строку в своем индивидуальном виде (UIView), а не просматривать контроллер.

Во-вторых: Если вам нужно отобразить только некоторые простые формы или линии. Я предлагаю вам использовать элементы управления и изображения пользовательского интерфейса. Даже «drawRect» не рекомендуется, так как это приведет к большему количеству используемых ресурсов. Конечно, OpenGL нужно много ресурсов.

+0

спасибо elliot, и как я могу отображать строки с использованием элементов управления пользовательского интерфейса ??? – ghiboz

+1

Вы можете перетащить представление в любую форму, например, ширину 100 пикселей, прямоугольник высотой 1 пиксель, установить цвет фона как черный. он должен выглядеть как линия. :) И тогда вы можете поместить эту «линию» в качестве подвид вашего изображения. –

+0

нормально, но если линия должна быть изогнута ??? – ghiboz

1

Ответ довольно прост, вам нужно создать новый класс, расширяющий UIView, и переопределить функцию drawRect, чтобы рисовать (с помощью Quartz ...) вашу линию. Используйте этот метод, если вы хотите также использовать градиентный фон.

Я также разрабатываю Adobe Flex 4, и я замечаю, что iPhone SDK не имеет «шаблонов» и «макетов» в стиле «Кожа» и «Layout», как это делает Flex 4 (например, UIView может иметь Skin (в отдельном файле ..) и Макет (горизонтальный, вертикальный, плитка ....)), для меня это ужасный недостаток!

Его что-то, что открытая библиотека Три20 пытается принести в iPhone SDK.

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