0

コア アニメーションの使用を含むプロジェクトを開始しています。これまで、アプリのアニメーションに UIView アニメーションを使用してきました。コア アニメーションを使用して、アニメーションをより高いレベルに引き上げたいと考えています。

アニメーションの使用の概念を非常によく説明している Core Animation に関するBrad Larssonのレッスンをチェックしました。ただし、(UIView サブクラス) 独自の実装内でこれらのアニメーションを使用する適切な実装は、まったく不明です。

現時点では、スクロールビュー内に画像のサムネイル ビューを作成することができました。これは、内にビューを作成し、for-loopこれらの UIView をサブクラス化することによって行われます。drawRectしかし、Core Animation を使用した UIView サブクラスの関数内でこれらのビューにアニメーションを実装するにはどうすればよいでしょうか。曲線で変換することを考えていました。

drawRectこれまでのところ、弧の影と画像を上にして白い四角形を描画するための私のコード:

//Draw function for displaying the seperate views/thumbnails
- (void)drawRect:(CGRect)rect {

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGRect ShadowRect = CGRectMake(15,15, 130,90);
    CGRect ImageRect = CGRectMake(20,20, 120,80);

    //save context and add the arc calculation and apply it on the shadow
    CGContextSaveGState(context);
    CGMutablePathRef arcPath = createArcPathFromBottomOfRect(ShadowRect, 5.0);
    CGContextAddPath(context, arcPath);
    CGContextSetShadow(context, CGSizeMake(0.0, 5.0), 3.0);
    CGContextFillPath(context);
    CGContextRestoreGState(context);

    //now we draw a white rectangle within the same frame as the shadow
    CGContextSaveGState(context);
    CGColorRef whiteColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0].CGColor;
    CGContextSetFillColorWithColor(context, whiteColor);
    CGContextFillRect(context, ShadowRect);
    CGContextRestoreGState(context);

    CGContextSaveGState(context);
    [self.img drawInRect:ImageRect];
    CGContextRestoreGState(context);

    CFRelease(arcPath);
}
4

1 に答える 1

2

申し訳ありませんが、Core Animation を使用して drawRect 内でアニメーション化することはできません。ビューとレイヤーのみをアニメーション化できます。

ただし、コードを見ると、Core Animation のみを使用してこれを実行できるはずです。createArcPathFromBottomOfRect() が角の半径 5 の角丸長方形を作成すると仮定していますか? もしそうなら、これは非常に簡単です。そうでない場合は、より高度なパスを実行するために CAShapeLayer を使用する必要がある場合があります。

プロジェクトに QuartzCore.framework をインポートしていない場合は、インポートする必要があります。

あなたがしているのは、影のある画像の角の丸い長方形を作成することだけです。

画像を 内にUIImageView設定してから、画像ビュー レイヤーの cornerRadius プロパティを設定するだけです。

myImageView.layer.cornerRadius = 5.0;

ここで、影については、後でイメージ ビューの影のプロパティを構成します。

myImageView.layer.shadowColor = [UIColor blackColor].CGColor;
myImageView.layer.shadowOffset  = CGSizeMake(0.0, 5.0);
myImageView.layer.shadowRadius = 3.0;
myImageView.layer.shadowOpacity = 0.5;
// Setting a shadow path will improve performance
myImageView.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:myImageView.bounds 
                                                          cornerRadius:myImageView.layer.cornerRadius].CGPath;

createArcPathFromBottomOfRect()角丸四角形よりも複雑な場合。

CAShapeLayerパスを表すを作成する必要があります。幸いなことに、作成している CGPathRef が必要です。

CAShapeLayer *myMaskLayer = [CAShapeLayer layer];
myMaskLayer.path = createArcPathFromBottomOfRect(myRect, 5.0);

これで、画像ビューをパスでマスクできます。

myImageView.layer.mask = myMaskLayer;

影の場合は、同じパスを持つ別のシェイプ レイヤーを作成し、そのレイヤーに影を追加する必要があります (影のパスを含む)。ここで、影を作成する形状レイヤーの上に画像ビューを追加すると、それを myShadowLayer と呼びましょう。影のある任意の形状にマスクされた画像ができます。

于 2012-06-07T21:00:58.937 に答える