2013-07-31 85 views
4

我必须改变它的框架与animateWithDuration:animations方法一个UITextView:跟踪UIView的框架改变动画

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

是否有任何的回调,可以帮助我追踪的UITextView的高度,因为它以动画?

+0

我很确定没有。你想要做什么?您可能需要根据高度的变化以及变化的时间来计算高度。 – JeffRegan

+0

不要那样做!缓和功能并不总是线性的,因此这种方法将不起作用。要么制作自定义动画,要么查看我的答案。 – Farthen

+0

为什么在动画期间寻找一种方式来跟踪文本框的框架? –

回答

1

这取决于你想用这个东西做什么。

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

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

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

3

没有准确的方法。 这是因为该框架只是直接设置。动画照顾过渡,但实际上没有过渡。

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

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

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