Лучшая практика для обработки анимации в файле XIB с минимальным повторением кода - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть разные UIViewController, который содержит компоненты, которые появляются и исчезают из вида (с анимацией, как перемещение перемещения).Я хотел бы иметь один класс, который уменьшает количество кода в каждом UIViewController и который можно настроить в файлах XIB.

Итак, мой файл XIB содержит:

  • Компонент, которыйнеобходимо перемещаться между двумя местоположениями (это «Мой вид» на следующем снимке экрана)
  • vVisible: UIView, который действует как индикатор для представления видимого местоположения
  • vHidden: UIView, который действует какиндикатор для представления скрытого местоположения

Вот как это выглядит в XCode:

enter image description here

И я создаю AppearingController (который также являетсяUIViewController).Он управляет анимацией, которая заставляет компонент появляться или исчезать.Он имеет 3 свойства IBOutlet:

IBOutlet UIView * vVisible;
IBOutlet UIView * vHidden;
IBOutlet UIView * v;

И публичный метод (только для запуска анимации между прямоугольником vVisible и прямоугольником vHidden представлений):

-(void) showVisible:(BOOL)visible {
CGRect frameDst = self.vVisible.frame;
if(!self.visible) frameDst = self.vHidden.frame;

CGPoint p = CGPointMake(CGRectGetMidX(frameDst), CGRectGetMidY(frameDst));
self.currentPosition = p;

CABasicAnimation *frameTranslation = [CABasicAnimation animationWithKeyPath:@"position"];
frameTranslation.toValue = [NSValue valueWithCGPoint:p];    
frameTranslation.duration = 0.40;
frameTranslation.repeatCount = 1;
frameTranslation.removedOnCompletion = NO;
frameTranslation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
frameTranslation.cumulative = NO;
frameTranslation.additive = NO;
frameTranslation.delegate = self;
[self.v addAnimation:frameTranslation forKey:@"position"];
}

Итакв моем коде UIViewController мне просто нужно несколько кодов:

  • В файле заголовка: свойство iboutlet / для привязки к экземпляру AppearingController XIB.
  • В реализацииfile: я могу вызвать [self.appearingController showVisible: FALSE], чтобы запустить анимацию, чтобы скрыть / показать компонент

И ... он работает .Но я не совсем удовлетворен, потому что, я чувствую, что это немного искажено и тяжело.Потому что:

  • AppearingController является UIViewController (я не справлялся с объектом или внешним объектом из библиотеки объектов).
  • vVisible и vHidden являются представлениями, но мне не нужно представлениеметод / функциональные возможности.Мне просто нужен view.frame, чтобы указать местоположение.

Этот подход вам подходит?

Как вы можете улучшить его?

У вас есть какой-то шаблон, который вы используете для достижения этой же цели?

Мне интересно

Спасибо.

1 Ответ

0 голосов
/ 27 декабря 2011

Это выглядит довольно хорошо!Вы можете закодировать это несколькими способами на самом деле.Но когда дело доходит до этого конкретного примера, не имеет значения, хотите ли вы лучшего подхода в кодировании.Когда вы беретесь за гораздо более крупный проект, необходимо, чтобы вы спроектировали свои структуры данных и схему кодирования таким образом, чтобы вы выполняли их в максимально сжатые сроки и оптимизировали!

Например, в гораздо большем проекте, где вам нужно обработать 100 изображений, вы можете просто создать класс для анимации и соответствующим образом разделить их на подклассы и либо ссылаться на них, либо наследовать их, так что ваш подход логичен и требует времени.экономии.Надеюсь, вы поняли!

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