gpt4 book ai didi

ios拦截动画值

转载 作者:行者123 更新时间:2023-12-01 17:34:27 24 4
gpt4 key购买 nike

[UIView animatWithDuration...] 的 ios 动画中如何在动画期间截取动画值?
这是我当前(不工作)的解决方案:

#import "FooterSelectionView.h"
#import <QuartzCore/QuartzCore.h>

@implementation FooterSelectionView

@synthesize displayLink;

- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
// Initialization code

selector = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"selector.png"]];
[self addSubview:selector];

[self setSelectorFrame:CGRectMake(700, 0, selector.frame.size.width, selector.frame.size.height)];
}
return self;
}

- (void)drawRect:(CGRect)rect
{
UIImage *bg = [UIImage imageNamed:@"overlayArea.png"];
[bg drawInRect:CGRectMake(0, 0, 957, 127) blendMode:kCGBlendModeNormal alpha:1];

[selector.image drawInRect:selector.frame blendMode:kCGBlendModeOverlay alpha:1];
}

-(void)step {
[self setNeedsDisplay];

NSLog(@"%@", @"step");
}

- (void)setSelectorFrame:(CGRect)frame {
displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(step)];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

[UIView animateWithDuration:5 animations:^{
selector.frame = frame;
//self.alpha = 0
} completion:^(BOOL finished){
[self setNeedsDisplay];

[self.displayLink invalidate];
self.displayLink = nil;
NSLog(@"%@", @"stop");
}];
}

@end
我看到实际的 ImageView 移动了,但是带有覆盖的“绘制”版本只会立即变为目标值。我希望能够告诉“绘制”版本去任何实际的选择器 View 。我怎样才能做到这一点?
编辑
当我 NSLog selector.frame.origin.x我注意到该值始终为 0 .我可以看到选择器是屏幕上的动画,那么给出了什么?

最佳答案

这里有几个错误:

  • 不要尝试使用 drawRect 进行逐帧动画,因为 Core Graphics 没有硬件加速(它在模拟器上可能看起来不错 - 它不会在真实设备上),所以它真的不够快。

    如果要为图像的矩形设置动画,请使用 UIImageView 并使用普通 UIView 动画方法对其进行动画处理。

    如果您看不到使用普通动画方法实现动画的方法,您可以使用 displayLink 逐帧进行,但您仍然应该通过更新 UIImageView 的帧而不是直接在 drawRect 中绘制图像来进行绘制.
  • UIView 动画不动画 view.frame直接属性。如果您设置 view.frame它立即设置为您指定的任何值,即使在制作动画时也是如此。尝试将逐帧动画同步到另一个 View 的帧,因为它为此进行动画处理是行不通的。

    要获得动画 View 帧的实际中间动画值,您需要查看 view.layer.presentationLayer.frame相反 - 这是动画的值。 view.frame实际上只是一个返回 view.layer.modelLayer.frame 的 getter 方法,始终设置为任意值 view.frame上次设置为。
  • 关于ios拦截动画值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9165115/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com