Создаю свой пользовательский индикатор загрузки. Итак, я обновляю мой взгляд, как этогоПросмотр остановки анимации после навигации
@property (nonatomic, readonly) CAShapeLayer *progressLayer;
@property (nonatomic, readwrite) BOOL isAnimating;
- (void)layoutSubviews {
[super layoutSubviews];
self.progressLayer.frame = CGRectMake(0, 0, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds));
[self updatePath];
}
- (void)updatePath {
CGPoint center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));
CGFloat radius = MIN(CGRectGetWidth(self.bounds)/2, CGRectGetHeight(self.bounds)/2) - self.progressLayer.lineWidth/2;
CGFloat startAngle = 3 * M_PI_2;
CGFloat endAngle = self.endAngle;
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
self.progressLayer.path = path.CGPath;
}
Анимация начинается здесь
- (void)startAnimating {
if (self.isAnimating)
return;
CABasicAnimation *animation = [CABasicAnimation animation];
animation.keyPath = @"transform.rotation";
animation.duration = 1.0f;
animation.fromValue = @(0.0f);
animation.toValue = @(2 * M_PI);
animation.repeatCount = INFINITY;
[self.progressLayer addAnimation:animation forKey:kLLARingSpinnerAnimationKey];
self.isAnimating = true;
}
- (void)stopAnimating {
if (!self.isAnimating)
return;
[self.progressLayer removeAnimationForKey:kLLARingSpinnerAnimationKey];
self.isAnimating = false;
}
- (CAShapeLayer *)progressLayer {
if (!_progressLayer) {
_progressLayer = [CAShapeLayer layer];
_progressLayer.strokeColor = self.tintColor.CGColor;
_progressLayer.fillColor = nil;
_progressLayer.lineWidth = 1.5f;
}
return _progressLayer;
}
У меня есть панели вкладок приложения, так что проблема при запуске анимации, я нажимаю на другую вкладку, а затем вернуться к первому view, мой пользовательский индикатор не оживляет. Также эта ошибка (функция) появляется в ячейках коллекции, если я добавляю свой индикатор в ячейки. добавить свой индикатор, вызвав простой метод addSubview:
[view addSubview:indicator];
[indicator startAnimating];
Как я могу предотвратить остановки анимировать после навигации? Спасибо заранее.
Когда вы переходите от одного вида к другому в приложении tabBar, область видимости этого релиза является выпуском, так что объект objet жив. Также основное использование индикатора - дать пользователю понять, что он/она должен дождаться завершения этой услуги/операции, а также вы должны отключить индекс выбора tabBar до завершения индикатора. Отдых все зависит от использования приложения ur. Пользовательский интерфейс предложения является частью приложения. – nikhil84
@ walle84, но почему UIActivityIndicatorView отлично работает и не останавливается? –
У меня не было этой строки «мой пользовательский индикатор не оживляет». Так не оживляет в каком смысле? – nikhil84