换帧时回电话

时间:2013-09-27 13:14:55

标签: iphone ios objective-c uiview frame

我正在尝试使用动画更改视图的框架。我想知道动画期间的帧。这就是我在做的事情:

[_viewTemp addObserver:self forKeyPath:@"frame" options:0 context:NULL];
[UIView animateWithDuration:1.0 animations:^{
    CGRect frame = _viewTemp.frame;
    frame.origin.x += 100;
    _viewTemp.frame = frame;
}];

这里_viewTemp是我的UIView类对象。我想在动画工作时改变每一帧。 喜欢: 当前原点是{10,10}动画合并后它将是{110,10}。我想要像{11,10},{12,10}这样的每一帧变化都要回调。

我不知道这是否可行。使用KVO我只能收到一次回叫。甚至通过创建子类并处理

- (void)setFrame:(CGRect)frame;

没有按预期工作。

只是想确定这是否可行,如果是,则确定如何。

感谢。

2 个答案:

答案 0 :(得分:1)

您必须使用计时器。在timer事件处理程序中执行此操作

-(void)timerHandler:(NSTimer *)timer {

  CGRect frame = [_tempView.layer.presentationLayer frame]; 

}

答案 1 :(得分:0)

使用:

#define kRight          YES
#define kLeft           NO;

@interface ViewController ()
{
    bool _moveDirection;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    _moveDirection = kRight;
}

- (IBAction)actionChange:(id)sender {

    __block NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:-1 target:self selector:@selector(handleAnimationTimer:) userInfo:nil repeats:YES];

    [UIView animateWithDuration:1.0 animations:^{

        CGRect frame = self.outletLabel.frame;

        if(_moveDirection == kRight) {
            _moveDirection = kLeft;
            frame.origin.x += 100;
        } else {
            _moveDirection = kRight;
            frame.origin.x -= 100;
        }
        self.outletLabel.frame = frame;

    } completion:^(BOOL finished) {

        // Remove timer
        [timer invalidate];
        timer = nil;
    }];

}


-(void)handleAnimationTimer:(NSTimer *)timer{

    CGRect frame = self.outletLabel.frame;
    NSLog(@"frame X %.00f", frame.origin.x);

}

您将能够看到 Frame在动画期间更改 - 它仅在开头设置动画。

我建议您滚动自己的帧动画(使用上面显示的预定定时器)并在每次调用期间调整帧

handleAnimationTimer:(NSTimer *)timer