4

iPhoneで画像をマスキングする方法を調べています。私はこの解決策に出くわしました

http://iosdevelopertips.com/cocoa/how-to-mask-an-image.html

これは静止画像に最適です。私がやりたいのは、UIImageView でアニメーションをマスクすることです。私が読んだことから、まともなフレームレートを達成しながらこれが可能だとは思いません.

これにより、次のことが可能かどうかを尋ねるようになります.UIImageView内の画像を「クリップ」できますか? つまり、UIImageView のサイズを画像のサイズに変更しないので、一部が切り取られますか?

4

2 に答える 2

8

パフォーマンスのためにこれを試したことはありませんが、コア アニメーション レイヤーをマスクとして使用できます。CAShapeLayer で使用するパスを定義して、シェイプを塗りつぶすことができます。次に、UIImageView のレイヤーのレイヤー マスクを指定します。何かのようなもの:

CGMutablePathRef path = CGPathCreateMutable();
// build the path by adding points
// ...

CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init];
[shapeLayer setPath:path];
[shapeLayer setFillColor:[[UIColor blackColor] CGColor]];
// Set shape layer bounds and position
// ...

// Set the mask for the image view's layer
[[imageView layer] setMask:shapeLayer];

参照するリンクのように、これは実際には新しい画像を作成していないことに注意してください。これは、画像ビューの上に表示するためのマスクを作成するだけです。これは、必要なものではない場合があります。

于 2009-11-19T17:30:50.337 に答える
5

私は高低を検索し、最終的に実質的にまったく制限のない解決策を見つけました。だから、ここに行きます:

UIImageView *maskeeImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MaskeeImage.png"]];

[maskeeImage setAnimationRepeatCount:-1];
[maskeeImage setAnimationImages:[[NSArray alloc] initWithObjects:[UIImage imageNamed:@"MaskeeImage1.png"], [UIImage imageNamed:@"MaskeeImage2.png"], [UIImage imageNamed:@"MaskeeImage3.png"], nil]];
[maskeeImage startAnimating];

CALayer *maskeeLayer = [maskeeImage layer];
maskeeLayer = CGRectMake(0, 0, 768, 1004);
[[[self view] layer] addSublayer:maskeeLayer];

UIImage *maskImage = [UIImage imageNamed:@"ImageMask.png"];
CALayer *maskLayer = [CALayer layer];
maskLayer.contents = (id) myImageMask.CGImage;
maskLayer.frame = CGRectMake(0, 0, 768, 1004);
[maskeeLayer setMask:maskLayer];

どうぞ!方法がわかれば、実際にはとても簡単です。私はいくつかの異なるオプションを表示しようとしました。UIImageViewsまたはUIImages、Animationsを使用します(これはマスクにも使用できます)。

すべてをまとめると、基本的に、ビューのCALayerでmaskプロパティを設定する必要があります。すべてのUIViewサブクラスにはCALayerがアタッチされているため、マスクまたはマスキーを取得する場所に関してまったく制限されません。

これがお役に立てば幸いです。乾杯、ディラン。

于 2010-10-07T04:26:45.037 に答える