테두리에서 반지를 방출하는 iOS에서 사용자 정의보기를 만들려고했습니다. 코어 그래픽을 사용하여 타원을 그렸습니다. 주기적으로 그것을 내고 싶습니다.UIView는 테두리 모양과 일치하는 반지를 나타냅니다.
저는 이것을 달성하기 위해 CAEmitterLayer와 Core Animation을 모두 사용하려고했지만 실제로 원하는 효과를 얻는 방법을 모릅니다. 이상적으로는 타원이 모양 가장자리에서 두께 약 10 픽셀의 반지를 발산하고 그것이 자라면서 멀어지면서 부드럽게 퇴색하고 싶습니다.
처음 시도했을 때 코어 애니메이션을 사용하여 타원이 3 초마다 자라기 만했지만, 타원이 고정되어 있고 움직이는 또 다른 레이어가 있으면 정말 원하는 것이 있습니다.
어떤 제안이 좋을 것입니다.
내 코드가 처음 시도에서 이동했습니다. 그러나 나는 기압이 것은 :
#import "ThumbView.h"
#import <QuartzCore/QuartzCore.h>
@implementation ThumbView
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
[super drawLayer:layer inContext:ctx];
// Create the emitter layer and make it the same size as the view.
CAEmitterLayer *emitterLayer = [CAEmitterLayer layer];
emitterLayer.frame = self.frame;
// Apply some attributes to the emitter.
emitterLayer.emitterShape = kCAEmitterLayerCircle;
emitterLayer.renderMode = kCAEmitterLayerOutline;
emitterLayer.emitterSize = CGSizeMake (4, 4);
// Create a scale animation that repeats every 3 seconds.
CAKeyframeAnimation *scaleAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
scaleAnimation.duration = 3.0f;
scaleAnimation.repeatCount = HUGE_VAL;
scaleAnimation.values = @[@1, @1.5f, @1.5f];
scaleAnimation.keyTimes = @[@0, @0.5, @1];
// Create a fade animation that repeats every 3 seconds.
CAKeyframeAnimation *glowAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
glowAnimation.duration = 3.0f;
glowAnimation.repeatCount = HUGE_VAL;
glowAnimation.values = @[@1, @0, @0];
glowAnimation.keyTimes = @[@0, @0.5, @1];
[emitterLayer addAnimation:scaleAnimation forKey:@"scale"];
[emitterLayer addAnimation:glowAnimation forKey:@"opacity"];
if (!self.pressed) {
[layer insertSublayer:emitterLayer above:layer];
} else {
[emitterLayer removeFromSuperlayer];
}
}
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code. Draw an elipse here.
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor (context, self.thumbColour.CGColor);
CGContextFillEllipseInRect (context, rect);
}
@end
그래서 내가 뭘하려고 한 것은 drawLayer 내에서 에미 터 층을 만드는 것입니다 : inContext : 델리게이트 메소드; 그것에 애니메이션을 적용하십시오. 뷰 레이어에 하위 레이어로 추가합니다.
지금까지 시도한 코드를 더 쉽게 추가 할 수 있습니까? –
.gif를 사용하고 http://blog.stijnspijker.nl/2009/07/animated와 같은 것을 사용 하시겠습니까? 투명 GIF - for iphone-made-easy/gif가 작동하도록 허용 하시겠습니까? 나는 그것이 당신에게 엄청난 문제를 줄 수 있다고 생각합니다. – Lugubrious
나는 아마도 당신이 옳다고 생각합니다. 그것은 많은 슬픔을 덜어 줄 것입니다. 나는 gif를 사용하는 것에 불리하지 않습니다. 코드를 통해보다 효율적으로 작업하려고했지만 그만한 가치가있는 것보다 더 큰 문제가 될 수 있습니다. 더 많은 연구를 해본 결과 emitterLayer를 사용하는 것이 과잉이라고 생각합니다. – tomasbasham