こんな感じ。
2枚の画像を重ね合わせるだけでなくグラデーションマスク(レイヤー)を重ねているところがミソ。
- (NSArray *)getGradientColors { return [NSArray arrayWithObjects: (id)[UIColorFromHexAlpha(0xffffff, 1) CGColor], : (id)[UIColorFromHexAlpha(0xffffff, 1) CGColor], (id)[UIColorFromHexAlpha(0xffffff, 0.99) CGColor], (id)[UIColorFromHexAlpha(0xffffff, 0.95) CGColor], (id)[UIColorFromHexAlpha(0xffffff, 0.9) CGColor], (id)[UIColorFromHexAlpha(0xffffff, 0.8) CGColor], (id)[UIColorFromHexAlpha(0xffffff, 0.7) CGColor], (id)[UIColorFromHexAlpha(0xffffff, 0.6) CGColor], (id)[UIColorFromHexAlpha(0xffffff, 0.5) CGColor], (id)[UIColorFromHexAlpha(0xffffff, 0.4) CGColor], (id)[UIColorFromHexAlpha(0xffffff, 0.3) CGColor], (id)[UIColorFromHexAlpha(0xffffff, 0.2) CGColor], (id)[UIColorFromHexAlpha(0xffffff, 0.1) CGColor], (id)[UIColorFromHexAlpha(0xffffff, 0.05) CGColor], (id)[UIColorFromHexAlpha(0xffffff, 0.01) CGColor], nil]; }こういうのを用意しておいて、
_maskLayer = [CAGradientLayer layer]; switch (_animationDirection) { case AnimationDirectionLeftToRight: _maskLayer.startPoint = CGPointMake(0, 0.5); _maskLayer.endPoint = CGPointMake(1, 0.5); break; case AnimationDirectionRightToLeft: _maskLayer.startPoint = CGPointMake(1, 0.5); _maskLayer.endPoint = CGPointMake(0, 0.5); break; case AnimationDirectionTopToBottom: _maskLayer.startPoint = CGPointMake(0.5, 0); _maskLayer.endPoint = CGPointMake(0.5, 1); break; case AnimationDirectionBottomToTop: _maskLayer.startPoint = CGPointMake(0.5, 1); _maskLayer.endPoint = CGPointMake(0.5, 0); break; } [_imageLayer setMask:_maskLayer]; : } - (void)bindMaskLayer { _maskLayer.colors = [self getGradientColors]; }
CAGradientLayerを作り、.colorsにセット。方向に応じて startPoint/endPointを調整。
一手間かけるだけでよくなる一例。
ネタ元はこちら