私は次のことをしようとしています -
同じ画像の 2 つのバージョンがあります。1 つはカラー、もう 1 つは白黒です。白黒を「上にスライド」させて、その下にあるものを表示させたい。
高さとフレームを設定しようとしましたが、思いどおりに動作しませんでした。
たとえば、これは両方の UIImages の組み合わせであり、一方が他方を明らかにし、動かない:
何か案は?:)
OK、これは灰色のビューでマスクを使用した別の方法です。私は実際にこれを blueView と grayView でテストしました。グレーが青を覆っています。グレーレイヤーが見えるように、グレーレイヤーの上にマスクレイヤーを置きます。次に、マスクをグレー レイヤーから遠ざけるようにアニメーション化し、グレー レイヤーを移動せずに非表示にします。グレーが消えるところから青が表示されます。
これを試してみたい場合は、単一のビューで 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>
1つの方法は、UIViewをスタックして、カラー画像が白黒画像で完全に覆われる(隠される)カラー画像の上に白黒画像を配置することです。
[self.view insertSubview:bwImage aboveSubview:colorImage];
白黒ビューのみが表示されます。次に、B&WビューでclipsToBoundsを設定します。
bwImage.clipsToBounds = YES;
最後に、bwImageの境界の高さをアニメーション化して、高さが0に縮小し、白黒画像をクリップして、その背後にあるカラー画像を表示します。このようなもの:
[UIView animateWithDuration:1.0 animations:^{
CGRect b = bwImage.bounds;
b.size.height = 0;
bwImage.bounds = b;
}];
私はこれを試していませんが、うまくいけばあなたはアイデアを得るでしょう。