标签: cabasicanimation

动画一个只改变其他属性的图层属性?

想象一下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)

但.

这是行不通的,startPointendPoint不是移动的.

怎么了?


注意 - 悲惨的是你似乎不能@NSManaged拥有一个带有didSet的属性......

在此输入图像描述


注意 - 只需覆盖绘制循环 …

animation core-animation cabasicanimation ios cagradientlayer

6
推荐指数
1
解决办法
440
查看次数

完成后停止删除CABasicAnimation

嘿,我有这个代码片段(持续时间为.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"应该是为了防止这种情况?

iphone calayer cabasicanimation caanimation

5
推荐指数
1
解决办法
2090
查看次数

如何循环CATransaction块中包含的几个CABasicAnimations?

在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)

xcode objective-c repeat cabasicanimation catransaction

5
推荐指数
1
解决办法
1659
查看次数

翻译期间改变图像

如何在翻译过程中使用一组图像(即在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)

core-animation objective-c cabasicanimation ios

5
推荐指数
1
解决办法
383
查看次数

如何为CABasicAnimation设置颜色?

CABasicAnimation具有期望id的toValue属性.但是Quartz Core不能与UIColor一起使用,它需要一个CGColor结构.我如何为CABasicAnimation提供颜色?

iphone core-animation cabasicanimation ipad ios

5
推荐指数
1
解决办法
6213
查看次数

IOS Coreplot散点图动画绘图

我需要在ios中为散点图设置动画,以便在绘制线时进行绘制.在这个网站http://www.highcharts.com上也有类似的效果.我尝试过基本的动画但没有成功但是不可能产生这种效果.有没有人知道如何做到这一点?

cabasicanimation core-plot ios

5
推荐指数
1
解决办法
381
查看次数

如何在CABasicAnimation之后使UI对象响应

在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)

core-animation objective-c cabasicanimation ios

5
推荐指数
1
解决办法
1472
查看次数

当superView的比例改变时,绘制路径的CABasicAnimation不会缩放

我有一个绘制矩形到特定百分比的动画.

为此,我画了一个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)

calayer cabasicanimation cashapelayer swift

5
推荐指数
1
解决办法
742
查看次数

应用完成时,CABasicAnimation会闪烁

我试图将旋转动画按度数应用于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)

objective-c cabasicanimation ios catransaction

5
推荐指数
2
解决办法
1016
查看次数

在 CABasicAnimation 中使用 #keyPath 时,类型“CGPoint”没有成员“x”

我正在尝试使用 #keyPath 语法来获取 CALayer 属性来为它设置动画:

let myAnimation = CABasicAnimation.init(keyPath: #keyPath(CALayer.position.x))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

类型 'CGPoint' 没有成员 'x'

我错过了什么?

calayer cabasicanimation ios swift

5
推荐指数
1
解决办法
808
查看次数