跟踪UIView帧更改动画

时间:2013-07-31 02:14:48

标签: iphone ios objective-c ios6 uiview

我有一个UITextView,它使用animateWithDuration:animations方法更改了它的框架:

[UIView animateWithDuration:1.5 animations:^{
    [_textView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - keyboardSize.height-25)];
}];

是否有任何回调可以帮助我跟踪UITextView的动画高度?

3 个答案:

答案 0 :(得分:3)

没有准确的方法。 那是因为框架只是直接设置。动画负责转换,但实际上没有过渡。

有一些估算当前帧大小的方法,对我来说,最好的是使用计时器的简单数学解决方案,动画开始时和动画持续时间。

但是,如果你只是采取另一种方式,它可能是最好的,因为这肯定会影响你的代码成本和精度。

这是我的第一篇文章,我真的不知道什么,只是学习并试图提供帮助。

答案 1 :(得分:1)

这取决于你想用这件事做什么。

如果您想要以某种方式准确了解您的相框信息,请使用presentationLayer。这是对屏幕上实际内容的半精确表示。请注意,这是在视图的坐标(边界)中,因此您需要将其转换为超视图的坐标系以获取当前帧。

CGRect currentTextViewFrame = [_textView.superview convertRect:[_textView.layer.presentationLayer frame] fromView:_textView];

但请注意,这将是关于一个绘图循环或更多关闭。如果您试图将另一个动画作为基础,则可能会出现问题,并可能导致闪烁或其他延迟引起的影响。此外,至少官方文档说这可能并不总是非常快,如果您出于性能原因需要这些信息,您可能希望自己制作动画。

答案 2 :(得分:0)

[_textView.layer.presentationLayer frame].size.height;

积分属于this anwser