1. ホーム
  2. ios

[解決済み] iOS 7 の視差効果をビューコントローラーで利用する

2022-10-08 01:04:18

質問

iOS 7用のアプリをObjective-Cで開発しています。私のアプリには、いくつかのボタンときれいな背景画像がある画面があります。(これは、単純なxibで UIButtons の上に UIImageView .)

そのボタンに、iOS 7 のホーム画面にあるような視差効果があれば、電話を傾けると背景が見えるので、クールだろうなと思ったのです。

自分のアプリにその効果を実装するにはどうしたらよいでしょうか。

どのように解決するのですか?

iOS 7 で、Apple は UIMotionEffect を使用して、ユーザーのデバイスの向きに関連する Motion エフェクトを追加することができます。たとえば、ホーム画面の視差効果をエミュレートするには、サブクラスの UIInterpolatingMotionEffect を使用することができます。 ここで のように、数行のコードで実現できます。

Objective-C :

// Set vertical effect
UIInterpolatingMotionEffect *verticalMotionEffect = 
  [[UIInterpolatingMotionEffect alloc] 
  initWithKeyPath:@"center.y"
             type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
verticalMotionEffect.minimumRelativeValue = @(-10);
verticalMotionEffect.maximumRelativeValue = @(10);

// Set horizontal effect 
UIInterpolatingMotionEffect *horizontalMotionEffect = 
  [[UIInterpolatingMotionEffect alloc] 
  initWithKeyPath:@"center.x"     
             type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
horizontalMotionEffect.minimumRelativeValue = @(-10);
horizontalMotionEffect.maximumRelativeValue = @(10);
  
// Create group to combine both
UIMotionEffectGroup *group = [UIMotionEffectGroup new];
group.motionEffects = @[horizontalMotionEffect, verticalMotionEffect];

// Add both effects to your view
[myBackgroundView addMotionEffect:group];

スウィフト (@Lucas に感謝)。

// Set vertical effect
let verticalMotionEffect = UIInterpolatingMotionEffect(keyPath: "center.y",
type: .TiltAlongVerticalAxis)
verticalMotionEffect.minimumRelativeValue = -10
verticalMotionEffect.maximumRelativeValue = 10

// Set horizontal effect
let horizontalMotionEffect = UIInterpolatingMotionEffect(keyPath: "center.x",
    type: .TiltAlongHorizontalAxis)
horizontalMotionEffect.minimumRelativeValue = -10
horizontalMotionEffect.maximumRelativeValue = 10

// Create group to combine both
let group = UIMotionEffectGroup()
group.motionEffects = [horizontalMotionEffect, verticalMotionEffect]

// Add both effects to your view
myBackgroundView.addMotionEffect(group)

また、これをより簡単に行うためのライブラリや、古いバージョンのiOSにこの機能を追加するためのライブラリもたくさん見つかります。