Добавление "Вокруг меня"-подобных стрелок в UITableView
Я пытаюсь разработать приложение с "Around Me"-подобной функцией списка местоположений с маленькими стрелками на боковой стороне. Благодаря Stackru не возникло проблем с переносом и смещением в разные места, а компенсация задержки компаса хорошо справилась со следующим учебником: http://www.sundh.com/blog/2011/09/stabalize-compass-of-iphone-with-gyroscope/
Все это прекрасно работает только с одним местоположением в этом UITableView. Но когда есть более одного местоположения, стрелки не станут гладкими, и мне кажется, что мой iPhone не достаточно быстр для вычисления вещи и поворота этих нескольких стрелок, но я не знаю, как это сделать лучше.
На данный момент я пытаюсь это (без конкретного направления смещения направления):
- Я сохраняю все UIImageViews всех ячеек в массиве
при получении нового значения рыскания я перебираю массив и актуализирую все вращения изображений
if(motionManager.isDeviceMotionAvailable) { // Listen to events from the motionManager motionHandler = ^ (CMDeviceMotion *motion, NSError *error) { CMAttitude *currentAttitude = motion.attitude; float yawValue = currentAttitude.yaw; // Use the yaw value // Yaw values are in radians (-180 - 180), here we convert to degrees float yawDegrees = CC_RADIANS_TO_DEGREES(yawValue); currentYaw = yawDegrees; // We add new compass value together with new yaw value yawDegrees = newCompassTarget + (yawDegrees - offsetG); // Degrees should always be positive if(yawDegrees < 0) { yawDegrees = yawDegrees + 360; } compassDif.text = [NSString stringWithFormat:@"Gyro: %f",yawDegrees]; // Debug float gyroDegrees = (yawDegrees*radianConst); // If there is a new compass value the gyro graphic animates to this position if(updateCompass) { [self setRotateArrow:gyroDegrees animated:YES]; [self commitAnimations]; updateCompass = 0; } else { [self setRotateArrow:gyroDegrees animated:NO]; [UIView commitAnimations]; } };
и setRotateArrow: анимированный метод:
- (void) setRotateArrow:(float)degrees animated:(BOOL)animated{
UIImage *arrowImage = [UIImage imageNamed:@"DirectionArrow.png"];
for (int i = 0; i<arrowImageViews.count; i++) {
[(UIImageView *)[arrowImageViews objectAtIndex:i] setImage:arrowImage];
CGFloat arrowTransform = degrees;
//Rotate the Arrow
CGAffineTransform rotate = CGAffineTransformMakeRotation(arrowTransform);
[(UIImageView *)[arrowImageViews objectAtIndex:i] setTransform:rotate];
}
}
Если бы кто-нибудь понял, как заставить стрелки вращаться плавно, следуя за вращением устройства, я был бы очень благодарен.