3

私は次のことをしようとしています -

同じ画像の 2 つのバージョンがあります。1 つはカラー、もう 1 つは白黒です。白黒を「上にスライド」させて、その下にあるものを表示させたい。

高さとフレームを設定しようとしましたが、思いどおりに動作しませんでした。

たとえば、これは両方の UIImages の組み合わせであり、一方が他方を明らかにし、動かない:

ここに画像の説明を入力

何か案は?:)

4

2 に答える 2

5

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>
于 2012-06-27T01:14:55.037 に答える
0

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

私はこれを試していませんが、うまくいけばあなたはアイデアを得るでしょう。

于 2012-06-26T00:12:29.003 に答える