Концептуализация Cocoa Touch Views, контроллеров и OO-программирования в целом - PullRequest
0 голосов
/ 27 июня 2009

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

Скажем, я хотел бы иметь на экране переменное количество видов (например, изображений автомобилей), к которым пользователь может прикоснуться и перемещаться. Начните с создания подкласса UIView со свойством UIImage (в отличие от UIImageView или UIButton). Затем создайте экземпляры «красный», «синий» и «желтый» автомобили в контроллере представления и сохраните их в NSMutableArray?

Я мог бы установить начальный макет в Интерфейсном Разработчике, но не уверен, как подключить пользовательские объекты обратно к массиву? Некоторым нужно начинать в повернутом состоянии. Разве не удалось выяснить, как вращаться в IB?!? Таким образом, я предполагаю, что в этом случае было бы лучше создать начальное состояние в коде перед отображением представления.

Наконец, после отображения, обработать касания Beg, Ended и т. Д., Анимацию и логику добавления, удаления и подсчета «машин» в контроллере вида?

1 Ответ

0 голосов
/ 27 июня 2009

Похоже, вы на правильном пути. Я постараюсь учесть все ваши ожидания по одному:

  1. Представления на экране могут быть пользовательским подклассом UIView или UIImageViews. Возможно, вы захотите подумать о другой функциональности, которую вы хотите добавить в будущем. Подход UIView предлагает большую гибкость, а также позволит вам управлять поворотом, рисуя изображение автомобиля вручную. Для этого создайте подкласс UIView, присвойте ему свойство изображения и свойство поворота, а затем переопределите функцию «drawRect: (CGRect) rect» для рисования изображения.

  2. Помещение массива машин в контроллер вида звучит великолепно.

  3. Лучше всего сохранить исходный макет в файле NIB Interface Builder. Это позволяет вам легко менять интерфейс в будущем и вырезать много стандартного кода, необходимого для создания и размещения объектов на экране.

Тем не менее, невозможно связать несколько представлений с одним выходом массива. В этом конкретном случае я бы реализовал функцию viewDidLoad контроллера представления для создания нескольких автомобилей. Вы были на правильном пути!

Невозможно настроить вращение в Интерфейсном Разработчике, потому что это не популярный вариант. Вы можете реализовать вращение, используя преобразования CAAnimation, чтобы установить свойство вращения, а затем вручную нарисовать изображение под углом.

Надеюсь, это поможет!

РЕДАКТИРОВАТЬ: Вот пример кода для рисования изображения под углом. Он использует Quartz (также известный как Core Graphics), поэтому в документации Apple доступно гораздо больше информации

- (void)drawRect:(CGRect)r
{
    // get the drawing context that is currently bound
    CGContextRef c = UIGraphicsGetCurrentContext();

    // save it's "graphics state" so that our rotation of the coordinate space is undoable.
    CGContextSaveGState(c);

    // rotate the coordinate space by 90º (in radians). In Quartz, images are 
    // always drawn "up," but using CTM transforms, you can change what "up" is!
    // Can also use TranslateCTM and ScaleCTM to manipulate other properties of coordinate space.
    CGContextRotateCTM(c, M_PI / 2);

    // draw an image to fill our entire view. Note that if you want the image to be semi-transparent,
    // the view must have opaque = NO and backgroundColor = [UIColor clearColor]!
    CGContextDrawImage(c, self.bounds, [[UIImage imageNamed:@"image_file.png"] CGImage]);

    // restore the graphics state. We could just rotate by -M_PI/2, but for complex transformations
    // this is very handy.
    CGContextRestoreGState(c);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...