Нарисуйте линию над UIViewController - PullRequest
1 голос
/ 09 июня 2010

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

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

Ответы [ 3 ]

6 голосов
/ 09 июня 2010

Вы уверены в OpenGL?

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

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

РЕДАКТИРОВАТЬ: Не связывайтесь с hitTest.Просто снимите флажок Взаимодействие с пользователем, включенное в XIB ...

РЕДАКТИРОВАТЬ: Пример кода:

@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
1 голос
/ 25 июля 2010

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

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

Это то, что библиотека с открытым исходным кодом Three20 пытается привнести в iPhone SDK.

1 голос
/ 09 июня 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...