2

横に小さな方向矢印がある場所リストの「Around Me」のような機能を備えたアプリを開発しようとしています。Stackoverflow のおかげで、さまざまな場所への方位とオフセットは問題ではなく、次のチュートリアルでコンパスラグをうまく補正できました 。 iphone-with-ジャイロスコープ/

そのUITableViewの1つの場所だけで、すべてのものは正常に機能します。しかし、複数の場所がある場合、矢印はスムーズに回転せず、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:animated メソッド:

- (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];
    }
}

誰かがデバイスの回転にスムーズに追従する矢印の回転を取得する方法を知っていれば、私は非常に感謝しています.

4

0 に答える 0