想象一下CAGradientLayer.
动画.startPoint和动画很容易.endPoint.
现在设想一个浮动spinLike,它只是简单地设置它们两个.
{因此,您可以简单地制作动画,而不是使用两种不同的动画spinLike.}
所以像..
class CustomGradientLayer: CAGradientLayer {
@objc var spinLike: CGFloat = 0 {
didSet {
startPoint = CGPoint( ... )
endPoint = CGPoint( ... )
setNeedsDisplay()
}
}
}
Run Code Online (Sandbox Code Playgroud)
动画spinLike......
class Test: UIView {
...
g = CustomGradientLayer()
a = CABasicAnimation(keyPath: "spinLike")
...
g.add(a, forKey: nil)
...
Run Code Online (Sandbox Code Playgroud)
但.
这是行不通的,startPoint而endPoint不是移动的.
怎么了?
注意 - 悲惨的是你似乎不能@NSManaged拥有一个带有didSet的属性......
注意 - 只需覆盖绘制循环 …
animation core-animation cabasicanimation ios cagradientlayer
嘿,我有这个代码片段(持续时间为.5,金额为1.5)
CABasicAnimation *grow = [CABasicAnimation animationWithKeyPath:@"transform"];
grow.duration = duration;
grow.repeatCount = 0;
grow.removedOnCompletion = NO;
grow.autoreverses = NO;
grow.fromValue = [NSValue valueWithCATransform3D:CATransform3DScale(self.layer.transform, 1.0, 1.0, 1.0)];
grow.toValue = [NSValue valueWithCATransform3D:CATransform3DScale(self.layer.transform, amount, amount, amount)];
grow.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[self.layer addAnimation:grow forKey:@"grow"];
Run Code Online (Sandbox Code Playgroud)
但是当播放时,UIView会正常增长,但会快速恢复到其起始值.我认为"removedOnCompletion"应该是为了防止这种情况?
在Xcode 4.3.2中使用Obj.-c for iPhone 5.1; 我创建了一个CALayers数组,所有这些都来自同一个图像.然后,我希望通过CATransactions分组,同时将CABasicAnimation应用于阵列中的每个CALayer.这一切都有效.但是,我想重复调用CATransactions中包含的CABasicAnimations块,但是每次同时执行块时都能够单独修改每个动画的属性.例如,我有动画的值,我想每次为每个图层上的动画随机更改动画.因为我想重复相同的基本动画,但要进行属性修改; 将动画的repeatCount属性设置为某个高值将无效.我尝试在makeSwarm方法中使用for循环重复调用animate方法,使用animationDidStop引发另一个animate方法调用但最终发生的是新调用是使用CATransaction块而不是在最后,并且还有方法调用本身(在animate方法的末尾放置[self animate];); 这一切都不起作用.这是基本代码.我认为这很简单,但我没有看到重要的事情.谢谢,赛斯
ViewController.h
#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController{
UIImage *beeImage;
UIImageView *beeView;
CALayer *beeLayer;
CABasicAnimation *animat;
NSMutableArray *beeArray;
NSMutableArray *beeanimArray;
}
@property(retain,nonatomic) UIImage *beeImage;
@property(retain,nonatomic) NSMutableArray *beeArray;
@property(retain,nonatomic) NSMutableArray *beeanimArray;
@property(retain,nonatomic) UIImageView *beeView;
@property(retain,nonatomic) CALayer *beeLayer;
@property(retain,nonatomic)CABasicAnimation *animat;
-(void) animate;
-(void) makeSwarm;
@end
Run Code Online (Sandbox Code Playgroud)
ViewController.m
-(void) makeSwarm{
self.view.layer.backgroundColor = [UIColor orangeColor].CGColor;
self.view.layer.cornerRadius = 20.0;
self.view.layer.frame = CGRectInset(self.view.layer.frame, 20, 20);
CGRect beeFrame;
beeArray = [[NSMutableArray alloc] init];
beeImage = [UIImage imageNamed:@"bee50x55px.png"];
beeFrame …Run Code Online (Sandbox Code Playgroud) 如何在翻译过程中使用一组图像(即在img1和img2之间切换)更改myLayer.contents?谢谢!
UIImage *myImage = [UIImage imageNamed:@"img1.png"];
CALayer *myLayer = [CALayer layer];
myLayer.contents = (id)myImage.CGImage;
myLayer.Position = CGPointMake(0,0);
myLayer.Bounds=CGRectMake(0.0, 0.0, 50, 50);
[self.view.layer addSublayer:myLayer];
//translation1
CGPoint startPt = CGPointMake(10,10);
CGPoint endPt = CGPointMake(100,100);
CABasicAnimation *transl1 = [CABasicAnimation animationWithKeyPath:@"position"];
transl1.removedOnCompletion = FALSE;
transl1.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transl1.fromValue = [NSValue valueWithCGPoint:startPt];
transl1.toValue = [NSValue valueWithCGPoint:endPt];
transl1.duration = 3;
transl1.fillMode = kCAFillModeForwards;
transl1.beginTime = 0;
[myLayer addAnimation: transl1 forKey: nil];
Run Code Online (Sandbox Code Playgroud) CABasicAnimation具有期望id的toValue属性.但是Quartz Core不能与UIColor一起使用,它需要一个CGColor结构.我如何为CABasicAnimation提供颜色?
我需要在ios中为散点图设置动画,以便在绘制线时进行绘制.在这个网站http://www.highcharts.com上也有类似的效果.我尝试过基本的动画但没有成功但是不可能产生这种效果.有没有人知道如何做到这一点?
在CABasicAnimation滑入和弹跳后,我无法找到让我的UI对象(UISegmentedControl)触摸响应的方法.我该如何解决这个问题?
我知道UI对象在移动后位于表示树中.但我真的很喜欢CABasicAnimation提供的setTimingFunction功能,我只是无法使用UIView动画获得如此平滑的反弹.
动画的示例GIF(循环):

代码我在viewDidLoad中使用
CABasicAnimation *startAnimation = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"];
[startAnimation setFromValue:[NSNumber numberWithFloat:0]];
[startAnimation setToValue:[NSNumber numberWithFloat:slidingUpValue]];
[startAnimation setDuration:1.0];
startAnimation.fillMode = kCAFillModeForwards;
startAnimation.removedOnCompletion = NO;
[startAnimation setTimingFunction:[CAMediaTimingFunction functionWithControlPoints:0.0 :0.0 :0.3 :1.8]];
[[gameTypeControl layer] addAnimation:startAnimation forKey:nil];
Run Code Online (Sandbox Code Playgroud) 我有一个绘制矩形到特定百分比的动画.
为此,我画了一个CAShapeLayer:
func drawTheLayer() -> CAShapeLayer {
let lineWidth: CGFloat = borderWidth * bounds.size.width / standardSizeWidth
let cornerRadiusResized: CGFloat = cornerRadiusRanged * bounds.size.width / standardSizeWidth
let insetRect = CGRectInset(bounds, lineWidth/2.0, lineWidth/2.0)
let apath = ShapeDraw.createRoundedCornerPath(insetRect, cornerRadius: cornerRadiusResized, percent: percentageRanged)
let apathLayer = CAShapeLayer()
apathLayer.frame = bounds
apathLayer.bounds = insetRect
apathLayer.path = apath
apathLayer.strokeColor = AppColor.OnColor.CGColor
apathLayer.fillColor = nil
apathLayer.lineWidth = lineWidth
apathLayer.lineJoin = kCALineJoinRound
apathLayer.lineCap = kCALineCapRound
apathLayer.geometryFlipped = true
let flipTransform = CGAffineTransformMakeScale(1, -1)
apathLayer.setAffineTransform(flipTransform)
return apathLayer …Run Code Online (Sandbox Code Playgroud) 我试图将旋转动画按度数应用于a UIImageView并在完成块中保持旋转变换.
我面临的问题是,当执行完成块时,通过从动画的结束状态传递到完成块产生可见的闪烁.
这是我目前使用的代码:
if (futureAngle == currentAngle) {
return;
}
float rotationAngle;
if (futureAngle < currentAngle) {
rotationAngle = futureAngle - currentAngle;
}else{
rotationAngle = futureAngle - currentAngle;
}
float animationDuration = fabs(rotationAngle) / 100;
rotationAngle = GLKMathDegreesToRadians(rotationAngle);
[CATransaction begin];
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.byValue = [NSNumber numberWithFloat:rotationAngle];
rotationAnimation.duration = animationDuration;
rotationAnimation.removedOnCompletion = YES;
[CATransaction setCompletionBlock:^{
view.transform = CGAffineTransformRotate(view.transform, rotationAngle);
}];
[view.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 #keyPath 语法来获取 CALayer 属性来为它设置动画:
let myAnimation = CABasicAnimation.init(keyPath: #keyPath(CALayer.position.x))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
类型 'CGPoint' 没有成员 'x'
我错过了什么?
cabasicanimation ×10
ios ×7
objective-c ×4
calayer ×3
iphone ×2
swift ×2
animation ×1
caanimation ×1
cashapelayer ×1
core-plot ×1
ipad ×1
repeat ×1
xcode ×1