У меня есть разные UIViewController, который содержит компоненты, которые появляются и исчезают из вида (с анимацией, как перемещение перемещения).Я хотел бы иметь один класс, который уменьшает количество кода в каждом UIViewController и который можно настроить в файлах XIB.
Итак, мой файл XIB содержит:
- Компонент, которыйнеобходимо перемещаться между двумя местоположениями (это «Мой вид» на следующем снимке экрана)
- vVisible: UIView, который действует как индикатор для представления видимого местоположения
- vHidden: UIView, который действует какиндикатор для представления скрытого местоположения
Вот как это выглядит в XCode:
И я создаю 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, чтобы указать местоположение.
Этот подход вам подходит?
Как вы можете улучшить его?
У вас есть какой-то шаблон, который вы используете для достижения этой же цели?
Мне интересно
Спасибо.