2012-03-21 7 views
1

SLOT-MACHINEアプリの他の方法はありますか?これは、UIPICKERメソッドにアニメーション効果が遅いためです。UIPickerの代替

+0

私はTableViewを提案しています。すべてのデータをピッカーの代わりに読み込み、いずれかを選択することができます。 – Hemang

+0

?スピンアクションを適用できますか? –

+1

@Kobeスピンアクションは必要ありません。 UITableViewでは、水平スクロールが有効になっています。だからあなたは何の制限もなくそれを使うことができます。 –

答えて

3

CALayerアニメーションを使用してこれを行うことができます。

サブレイヤの3D変換を可能にするには、メインのslotMachineViewレイヤのクラスをCATransformLayerにする必要があります。

リールのシンボルを表す正方形の画像が10枚あるとします。画像ごとにCALayerを作成してください。誰のコンテンツプロパティが自分の画像の1つです。これはあなた」(翻訳し

  • そして、そのX軸を中心に

    • まずあなたが各レイヤーを回転させる必要があります(2 * PI)/ 10ある程度の距離を:次に、それぞれの層に、あなたは2つの変換を適用する必要があります計算する必要があります) に沿ってZ軸。

    これらのレイヤーをビューのレイヤーに追加します。 X軸の周りに画像の「円筒」が現れるはずです。

    円柱を回転させるには、最初の変換をCAAnimationで調整するか、タイマーを使用し、タイマーが発生するオフセットでX軸の回転を調整する必要があります。

    私は完全な実装の詳細を把握するためにあなたにそれを残しておきます - しかし、ここでそれを回転させるには、最初の「リール」

    int imageCount = 16; 
    
        for (int i = 0; i < imageCount; i++) { 
         // Load image from the bundle 
    
         NSString * fileName = [NSString stringWithFormat: @"Image-%d", i]; 
         NSString * filePath = [[NSBundle mainBundle] pathForResource: fileName ofType: @"jpeg"]; 
    
         UIImage * image = [UIImage imageWithContentsOfFile: filePath]; 
    
         // Create a layer with the image as content - My image size was 60x60 
    
         CALayer * imageLayer = [CALayer layer]; 
         imageLayer.bounds = (CGRect){CGPointZero, {60.0, 60.0}}; 
         imageLayer.contents = (id)image.CGImage; 
         imageLayer.position = (CGPoint){CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds)}; 
    
         // Set the initial image transform - I've hardcoded the translate along the 
         // z-axis to 150, but this will vary depending on the number of images 
         // and their size - you'll need to do some maths to work it out... sines or 
         // cosines or somesuch 
         CGFloat angle = (2.0 * M_PI)/imageCount * i; 
         CATransform3D transform = CATransform3DMakeRotation(angle, 1.0, 0.0, 0.0); 
         transform = CATransform3DTranslate(transform, 0.0, 0.0, 150.0); 
         imageLayer.transform = transform; 
    
         [self.layers addObject: imageLayer]; 
    
         [self.view.layer addSublayer: imageLayer]; 
        } 
    } 
    

    をロードし、作成するために、いくつかのコードです、あなたがする必要があるすべては、変更あり変換の回転部分。余分なクレジットを得るには、レイヤーが中心から離れていくにつれて、レイヤーに影を付けることができます。

  • +0

    NSArray/NSMutable配列にイメージを配置し、レイヤーを変換しますか? –

    +0

    良いアイデア。 UIPickerViewは、外側のグラフィックと組み合わせて、ホイールの幻影を与えるために、上下にシャドーグラデーションを持つように見えます。車輪の数字/テキストは変換されません。 – bandejapaisa

    +0

    @bandejapaisaどうすればいいですか?カリグラフィー? –

    2

    数字/記号ごとにUIImageViewを使用し、表示される画像の動きをアニメーション表示できます。 UIPickerを使用すると、文字と数字に限ります。 UIImageViewで、サクランボなどの他の典型的なスロットマシンビジュアルを追加することができます。

    +0

    どのようにスピン効果を適用できますか? –

    +1

    @Kobe Core Animationを適用するなど、自分で実装する必要があります。これはおそらくこの課題の全体的なポイントです。 – dasblinkenlight

    +0

    UIImageViewの画像はどこに保存できますか? –

    2

    私たちはあなたの宿題をしていますか?

    垂直UIScrollViewsを並べて使用し、ページングを有効にし、ビュー用にUIImageViewsを使用します。

    デフォルトではフラットに見えますが、機能的には同等です。

    UIPickerViewのように見えるようにするには、少しコア・アニメーション/コア・グラフィックスが必要です。

    +0

    はい、自動的にスクロールするにはUIScrollViewのメソッドを呼び出すことができます。 – bandejapaisa

    +0

    UIImageViewsにNSArray/NSMutable配列を使用できますか?私はイメージを保存できますか? –

    +0

    はい、配列を使用できます。 – bandejapaisa