2015-04-06 3 views
0

Я пытаюсь повернуть UIImageView вокруг точки привязки для имитации «радар развертки» стиль анимации. Мое понимание опорных точек заставляет меня думать, что (1, 1) должен быть нижним правом углом radar image. Тем не менее, установка точки привязки ImageView к это не дает мне поведение я ожидал. Это можно посмотреть here.Вращающийся UIImageView вокруг anchorpoint вопросы

Как видно, опорная точка - это путь вверх по правой стороне изображения, хотя он правильно расположен в центре. Я хочу, чтобы изображение вращалось вокруг центральной точки, как радар.

Вот соответствующий код:

self.radarView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, barDimension, barDimension)]; 
self.radarView.contentMode = UIViewContentModeScaleAspectFill; 
self.radarView.image = [UIImage imageNamed:@"radarSweep.png"]; 
self.radarView.layer.anchorPoint = CGPointMake(1, 1); 
self.radarView.layer.position = CGPointMake(screenWidth/2.0, screenHeight/2.0); 
[self.mapView addSubview:self.radarView]; 

CABasicAnimation *opacityInAnim = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
[opacityInAnim setFromValue:[NSNumber numberWithFloat:0.0]]; 
[opacityInAnim setToValue:[NSNumber numberWithFloat:1.0]]; 
opacityInAnim.duration = 0.25; 
opacityInAnim.fillMode = kCAFillModeForwards; 
opacityInAnim.removedOnCompletion = NO; 
opacityInAnim.beginTime = 0.0; 
opacityInAnim.delegate = self; 
[opacityInAnim setValue:@"radarSweep" forKey:@"animName"]; 

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
animation.fromValue = [NSNumber numberWithFloat:0.0]; 
animation.toValue = [NSNumber numberWithFloat:2 * M_PI]; 
animation.duration = 1.0f; 
animation.fillMode = kCAFillModeForwards; 
animation.repeatCount = 2; 
animation.removedOnCompletion = NO; 
[animation setBeginTime:0.0]; 
animation.delegate = self; 
[animation setValue:@"radarSweep" forKey:@"animName"]; 
animation.removedOnCompletion = YES; 

CABasicAnimation *opacityOutAnimBar = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
[opacityOutAnimBar setFromValue:[NSNumber numberWithFloat:1.0f]]; 
[opacityOutAnimBar setToValue:[NSNumber numberWithFloat:0.0f]]; 
opacityOutAnimBar.delegate = self; 
opacityOutAnimBar.fillMode = kCAFillModeForwards; 
opacityOutAnimBar.removedOnCompletion = NO; 
[opacityOutAnimBar setDuration:0.25]; 
[opacityOutAnimBar setValue:@"radarSweep" forKey:@"animName"]; 
[opacityOutAnimBar setBeginTime:1.35]; 

CAAnimationGroup *group = [CAAnimationGroup animation]; 
[group setDuration:2.0]; 
group.delegate = self; 
group.fillMode = kCAFillModeForwards; 
group.removedOnCompletion = NO; 
[group setAnimations:@[opacityInAnim, animation, opacityOutAnimBar]]; 
[group setValue:@"radarSweep" forKey:@"animName"]; 
[self.radarView.layer addAnimation:group forKey:@"group"]; 

Любые советы будут оценены. Заранее спасибо.

ответ

0

Ваше изображение радара не квадратное, но изображение имеет вид, поэтому изображение истекает кровью по границам изображения. Вы можете либо сделать self.radarView.layer.clipsToBounds = YES, либо изменить режим содержимого на ScaleToFit. Или вы можете изменить размер изображения в соответствии с пропорциями радарного изображения.

+0

Спасибо! Изображение было квадратным, но я сделал изменения в последнее время, и я забыл приспособить это. Выглядит отлично! –

Смежные вопросы