2013-09-27 35 views
1

我正在嘗試使用動畫更改視圖的框架。我想在動畫期間知道幀。這是我在做什麼:在更改幀時獲得回撥

[_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類對象。我希望動畫正在運行時每一幀都會改變。 Like: 當前原點是{10,10}動畫壓縮後,它將是{110,10}。我想爲每個幀更改{11,10},{12,10}進行回調。

我不知道這是否可能。使用KVO我只能接到一次回電。即使通過創建子類和處理

- (void)setFrame:(CGRect)frame; 

未按預期工作。

只是想確定這是否可能,如果是的話比如何。

謝謝。

+0

爲了什麼目的? –

回答

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

} 

你就可以看到,框時期間動畫變化- 這只是設定在開始動畫

我建議你滾你自己幀動畫(通過使用上面顯示的預定定時器),並調整每次通話過程中幀

handleAnimationTimer:(NSTimer *)timer 
1

你將不得不使用一個計時器。在計時器事件處理程序中,請執行此操作

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

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

}