2012-04-24 29 views
3

私は、次のようなことをやろうとしている -
iOSは画像の上に画像を上にスライドさせ、下の画像を表示します。 (ラjQuery.slide())

私は同じ画像、色1と黒と白の1の2つのバージョンがあります。私はB & Wを "スライドアップ"してその下にあるものを明らかにします。

高さとフレームを設定しようとしましたが、私が望むように動作させることができませんでした。例えば

、これは動いていないながら1は、他に明らかにされ、両方のUIImagesの組み合わせで、次のようになります。

enter image description here

任意のアイデア? :)

+0

私は好奇心が強いです。 UIViewContentModeTopと100%から0%に見える "最初の"画像の高さをアニメーション化しても機能しませんでしたか? –

+0

@ZakyGerman、Nope、それは反対方向にそれを明らかにする、上からの尺度です。私たちはアニメーションのための簡単なスプライトシートを使いました。 –

+0

@ShaiMishaliジェスチャーでこれを持っていますか? –

答えて

4

OK、ここでは、グレー表示でマスクを使用する別の方法があります。私は実際に、blueViewとgreyViewを使ってこれをテストしました。ここでは、灰色が青色に覆い隠されています。灰色のレイヤーが表示されるように、灰色のレイヤーにマスクレイヤーを配置します。マスクを灰色のレイヤーから動かすと、灰色のレイヤーが動かずに消えるようになり、青色は灰色が消える場所を通ります。

これを試したい場合は、単一のビューでXCodeで空のプロジェクトを作成し、このコードをviewDidLoadの中に配置します。それが私がこれをテストした方法です。

self.view.backgroundColor = [UIColor whiteColor]; 

UIView* blueView = [[[UIView alloc] init] autorelease]; 
blueView.backgroundColor = [UIColor blueColor]; 
blueView.frame = CGRectMake(50,50,100,100); 

UIView* grayView = [[[UIView alloc] init] autorelease]; 
grayView.backgroundColor = [UIColor grayColor]; 
grayView.frame = CGRectMake(50,50,100,100); 

[self.view addSubview:blueView]; 
[self.view addSubview:grayView]; // gray covers the blue 

// Create a mask to allow the grey view to be visible and cover up the blue view 
CALayer* mask = [CALayer layer]; 
mask.contentsScale = grayView.layer.contentsScale; // handle retina scaling 
mask.frame   = grayView.layer.bounds; 
mask.backgroundColor = [UIColor blackColor].CGColor; 
grayView.layer.mask = mask; 

// Animate the position of the mask off the grey view, as the grey becomes unmasked, 
// that part of the grey "dissappears" and is no longer covering the blue underneath 
CABasicAnimation* a = [CABasicAnimation animationWithKeyPath:@"position"]; 
a.duration = 4; 
a.fromValue = [NSValue valueWithCGPoint:mask.position]; 
CGPoint newPosition = mask.position; 
newPosition.y += mask.bounds.size.height; 
a.toValue = [NSValue valueWithCGPoint:newPosition]; 
a.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
[mask addAnimation:a forKey:@"colorize"]; // animate presentation 

mask.position = newPosition;  // update actual position 

は#importsでトップでこの行を忘れないでください:

#import <QuartzCore/QuartzCore.h> 
+0

もう1つ注意してください:下にあるカラービューの表示方法に応じて、マスクの位置を任意の方向にアニメートできます。 – progrmr

+0

パンチラ!私はそれを試して、それが動作するかどうかをお知らせします –

+0

信じられないほどうまく動作します!どうもありがとうございます! (: –

0

1つの方法は、B & W画像でカラー画像が完全に覆われている(隠されている)カラー画像の上にB & W画像が表示されるようにUIViewを積み重ねることです。

[self.view insertSubview:bwImage aboveSubview:colorImage]; 

B & Wビューのみが表示されます。今B & WビューにclipsToBoundsを設定:その高さがB & Wの画像をクリッピングし、その背後にカラー画像を明らかに、0まで収縮するよう

bwImage.clipsToBounds = YES; 

最後bwImageの境界に高さをアニメーション化します。このような何か:

[UIView animateWithDuration:1.0 animations:^{ 
    CGRect b = bwImage.bounds; 
    b.size.height = 0; 
    bwImage.bounds = b; 
}]; 

私はこれを試していないが、うまくいけばあなたのアイデアを得ます。

+0

また、別の方向に移動したい場合は、同時にbwImageの中央をボトムにアニメーション表示するだけです。 –

+0

progrmr、ありがとうございますが、これは私が質問したものとは反対の方向です(私の質問で述べたように...)@JesseRusak、別の方法でアニメーションを作成しようとしています。あなたの提案は何でしたか? –

+0

上記の答えを使用しますが、同じアニメーションブロックの 'CGPointMake(bwImage.center.x、bwImage.bounds.size.height)'に 'bwImage.center'のアニメーションを追加してください。 –

関連する問題