我正在使用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) 我正在使用CABasicAnimation永久旋转imageView,我想在旋转期间改变旋转速度.任何人都可以帮我吗?提前致谢!
我试图动画一段圆的外观.为了存档这个我使用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) 我对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.甚至可以做到吗?谢谢.
我有一个CALayer在AVMutableComposition被褪,应该在屏幕上停留了一会儿,然后消失.问题是,它应该在没有动画的情况下消失,但CABasicAnimation最小持续时间为0.25秒.
如何在没有动画的情况下在给定时间后设置图层的不透明度?
我想为一个形状设置动画,因为它从圆形过渡到圆角三角形.
TL; DR:我如何动态显示CAShapeLayer的path两人之间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) 我一直在使用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) 更新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
我有一个以编程方式调用的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) 我正在尝试将动画添加到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) cabasicanimation ×10
ios ×5
rotation ×3
swift ×3
calayer ×2
uiimageview ×2
animation ×1
caanimation ×1
cashapelayer ×1
cocoa-touch ×1
objective-c ×1
uibezierpath ×1
uitableview ×1
uitextfield ×1
uiview ×1
xcode ×1
xcode4 ×1