标签: cabasicanimation

如何获得停止/恢复CABasicAnimation工作的解决方案?

我正在使用CABasicAnimation旋转UIImageView,我无法恢复暂停的动画.动画从viewDidLoad方法开始:

UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MyImage.png"]];
self.myImage = img;
[self.view addSubview:img];
[img release];
CABasicAnimation *fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
fullRotation.fromValue = [NSNumber numberWithFloat:0];
fullRotation.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)];
fullRotation.duration = 10;
fullRotation.repeatCount = LARGE_VAL;
[img.layer addAnimation:fullRotation forKey:@"360"];
Run Code Online (Sandbox Code Playgroud)

我需要有不间断的可重复动画,当视图出现在屏幕上时,它会恢复.所以我已经阅读了这篇文章(这里)并实现了解决方案提供了我的苹果(解决方案)来停止和恢复图层动画.所以,我使用过这些方法:

-(void)pauseLayer:(CALayer*)layer{
    CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
    layer.speed = 0.0;
    layer.timeOffset = pausedTime;
}

-(void)resumeLayer:(CALayer*)layer{
    CFTimeInterval pausedTime = [layer timeOffset];
    layer.speed = 1.0;
    layer.timeOffset = 0.0;
    layer.beginTime = 0.0;
    CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
    layer.beginTime …
Run Code Online (Sandbox Code Playgroud)

core-animation rotation uiimageview cabasicanimation ios

7
推荐指数
2
解决办法
6022
查看次数

CABasicAnimation在旋转期间改变持续时间/速度

我正在使用CABasicAnimation永久旋转imageView,我想在旋转期间改变旋转速度.任何人都可以帮我吗?提前致谢!

rotation cabasicanimation

7
推荐指数
1
解决办法
1508
查看次数

圆段笔划的动画以完整笔划结束

我试图动画一段圆的外观.为了存档这个我使用CABasicAnimations工作安静.

动画从顶部开始,很好地移动到整个圆圈的三分之一.但是当动画结束时,圆圈会立即被完全绘制.

我怎么能防止这种情况?

这是我的自定义UIView的源代码:

- (void)drawRect:(CGRect)rect
{
    int radius = 100;
    int strokeWidth = 10;
    CGColorRef color = [UIColor redColor].CGColor;
    int timeInSeconds = 5;

    CGFloat startAngle = 0;
    CGFloat endAngle = 0.33;

    CAShapeLayer *circle = [CAShapeLayer layer];

    circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 2.0*radius, 2.0*radius) cornerRadius:radius].CGPath;

    circle.position = CGPointMake(CGRectGetMidX(self.frame)-radius, CGRectGetMidY(self.frame)-radius);

    circle.fillColor = [UIColor clearColor].CGColor;
    circle.strokeColor = color;
    circle.lineWidth = strokeWidth;

    [self.layer addSublayer:circle];

    CABasicAnimation *drawAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
    drawAnimation.duration            = timeInSeconds;
    drawAnimation.repeatCount         = 1.0;
    drawAnimation.removedOnCompletion = NO;

    drawAnimation.fromValue = [NSNumber numberWithFloat:startAngle];
    drawAnimation.toValue …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch core-animation objective-c cabasicanimation ios

7
推荐指数
1
解决办法
7735
查看次数

CABasicAnimation如何获得当前的旋转角度

我对CABasicAnimation有一些问题.它类似于那篇文章:CABasicAnimation旋转返回到原始位置

所以,我有在touchMove中旋转的uiimageview.在touchEnd调用方法做"惯性动画":

-(void)animationRotation: (float)beginValue
{
     CABasicAnimation *anim;
     anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
     anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
     anim.duration = 0.5;
     anim.repeatCount = 1;

     anim.fillMode = kCAFillModeForwards;
     anim.fromValue = [NSNumber numberWithFloat:beginValue];
     [anim setDelegate:self];    

     anim.toValue = [NSNumber numberWithFloat:(360*M_PI/180 + beginValue)];
     [appleView.layer addAnimation:anim forKey:@"transform"];

     CGAffineTransform rot = CGAffineTransformMakeRotation(360*M_PI/180 + beginValue);
     appleView.transform = rot;
}
Run Code Online (Sandbox Code Playgroud)

这个动画工作正常,但如果我在animationRotation结束前调用touchBegan,则旋转角度为beginValue.我需要阴极电流旋转角度.作为一个实验,我宣布方法

 -(vod) animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
 {
      NSLog(@"Animation finished!");
 }
Run Code Online (Sandbox Code Playgroud)

它看起来很有效.但我不知道如何在animationDidStop中为我的UIImageView获取角度值或CGAffineTransform.甚至可以做到吗?谢谢.

rotation cabasicanimation caanimation ios xcode4

7
推荐指数
1
解决办法
7862
查看次数

持续时间为零的CABasicAnimation

我有一个CALayerAVMutableComposition被褪,应该在屏幕上停留了一会儿,然后消失.问题是,它应该在没有动画的情况下消失,但CABasicAnimation最小持续时间为0.25秒.

如何在没有动画的情况下在给定时间后设置图层的不透明度?

calayer cabasicanimation avmutablecomposition

7
推荐指数
1
解决办法
847
查看次数

将CAShapeLayer圆圈设置为圆角三角形

我想为一个形状设置动画,因为它从圆形过渡到圆角三角形.

TL; DR:我如何动态显示CAShapeLayerpath两人之间CGPath的形状?我知道他们需要拥有相同数量的控制点,但我认为我这样做 - 这段代码出了什么问题?

开始和结束状态看起来像这样: 转换http://clrk.it/4vJS+

这是我到目前为止所尝试的内容:我正在使用a CAShapeLayer,并对其path属性进行动画处理.

根据文件(强调我的):

路径对象可以使用任何具体子类进行动画处理CAPropertyAnimation.路径将插值为"在线"点的线性混合; "离线"点可以非线性插值(例如,以保持曲线导数的连续性).如果两个路径具有不同数量的控制点或段,则结果未定义.

为了使圆和三角形具有相同数量的控制点,我将它们制成四角形:圆形是一个重圆角矩形,三角形"隐藏"一侧的第四个控制点.

这是我的代码:

self.view.backgroundColor = .blueColor()

//CREATE A CASHAPELAYER
let shape = CAShapeLayer()
shape.frame = CGRect(x: 50, y: 50, width: 200, height: 200)
shape.fillColor = UIColor.redColor().CGColor
self.view.layer.addSublayer(shape)

let bounds = shape.bounds

//CREATE THE SQUIRCLE
let squareRadius: CGFloat = CGRectGetWidth(shape.bounds)/2

let topCorner = CGPointMake(bounds.midX, bounds.minY)
let rightCorner = CGPointMake(bounds.maxX, bounds.midY)
let bottomCorner = CGPointMake(bounds.midX, bounds.maxY)
let …
Run Code Online (Sandbox Code Playgroud)

animation cabasicanimation cashapelayer ios

7
推荐指数
1
解决办法
813
查看次数

如何用固定的起始位置替换panGestureDidMove

我一直在使用UIPanGestureRecognizer来识别触摸,但我想用动画的固定开始到结束位置替换它.请参阅以下代码:

panGestureDidMove:

func panGestureDidMove(gesture: UIPanGestureRecognizer) {  
if gesture.state == .Ended || gesture.state == .Failed || gesture.state == .Cancelled {

} else {
    let additionalHeight = max(gesture.translationInView(view).y, 0)

    let waveHeight = min(additionalHeight * 0.6, maxWaveHeight)
    let baseHeight = minimalHeight + additionalHeight - waveHeight

    let locationX = gesture.locationInView(gesture.view).x

    layoutControlPoints(baseHeight: baseHeight, waveHeight: waveHeight, locationX: locationX)
    updateShapeLayer()
    }
}
Run Code Online (Sandbox Code Playgroud)

layoutControlPoints:

private func layoutControlPoints(baseHeight baseHeight: CGFloat, waveHeight: CGFloat, locationX: CGFloat) {  
let width = view.bounds.width

let minLeftX = min((locationX - width / 2.0) * 0.28, …
Run Code Online (Sandbox Code Playgroud)

uiview cabasicanimation uigesturerecognizer swift

7
推荐指数
1
解决办法
164
查看次数

无法使用AVVideoCompositionCoreAnimationTool在视频中显示动画CALayer

更新6:我已经设法完全解决了我的问题,但我仍然想要一个更好的解释,而不是我猜的是如果我不正确它不起作用的原因

我一直试图在视频上制作精灵表,但每次导出视频时,最终结果都是我开始的示例视频.

这是我的代码:

首先我的自定义CALayer来处理我自己的精灵表

class SpriteLayer: CALayer {
    var frameIndex: Int

    override init() {
        // Using 0 as a default state
        self.frameIndex = 0
        super.init()
    }

    required init?(coder aDecoder: NSCoder) {
        self.frameIndex = 0
        super.init(coder: aDecoder)
    }

    override func display() {
        let currentFrameIndex = self.frameIndex
        if currentFrameIndex == 0 {
            return
        }
        let frameSize = self.contentsRect.size
        self.contentsRect = CGRect(x: 0, y: CGFloat(currentFrameIndex - 1) * frameSize.height, width: frameSize.width, height: frameSize.height)
    }

    override func action(forKey event: String) -> CAAction? {
        if …
Run Code Online (Sandbox Code Playgroud)

calayer cabasicanimation avvideocomposition avassetexportsession swift

7
推荐指数
1
解决办法
435
查看次数

CABasicAnimation无法使用UIImageView

我有一个以编程方式调用的UIImageView,我试图让它旋转但它不起作用.图像将被放置在动态UITableView中(我无法将其更改为静态).我的表视图中的图像看起来不错,但它不会旋转.

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 122, 38, 38)];
    imageView.image = [UIImage imageNamed:@"settings1.png"];

    [self.view addSubview:imageView];

    CABasicAnimation *spin;
    spin = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
    spin.fromValue = [NSNumber numberWithFloat:0];
    spin.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)];
    spin.duration = 4;
    spin.repeatCount = 10*1000;

    [imageView.layer addAnimation:spin forKey:@"360"];
Run Code Online (Sandbox Code Playgroud)

xcode uitableview uiimageview cabasicanimation

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

用于UITextField的CABasicAnimation的笔画动画

我正在尝试将动画添加到UITextField用户编辑的边框.

想法是在编辑第一个文本字段后在登录页面中显示线条动画,然后在用户切换到下一个文本字段后,该行应移动到下面的文本字段.

我做了一个不能像我期待的那样努力的尝试.

我的代码:

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var verticSpace: NSLayoutConstraint!
    @IBOutlet weak var usernameTxtField: UITextField!
    @IBOutlet weak var passwordTxtField: UITextField!

    weak var shapeLayer: CAShapeLayer?


    let path = UIBezierPath()

    let shapeLayerNew = CAShapeLayer()

    override func viewDidLoad() {
        super.viewDidLoad()

        usernameTxtField.delegate = self

        passwordTxtField.delegate = self

    }


    func textFieldDidBeginEditing(_ textField: UITextField) {
        let path = UIBezierPath()

        if textField == usernameTxtField {
            if textField.text == "" {

                self.startMyLine()
            }

        }

        if passwordTxtField.isFirstResponder {

            let path2 = UIBezierPath()


            path2.move(to: …
Run Code Online (Sandbox Code Playgroud)

uitextfield cabasicanimation ios uibezierpath swift

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