tcu*_*rdt 6 iphone cocoa-touch core-animation uikit
我有一个自定义UIView来显示平铺图像.
- (void)drawRect:(CGRect)rect
{
...
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClipToRect(context,
CGRectMake(0.0, 0.0, rect.size.width, rect.size.height));
CGContextDrawTiledImage(context, imageRect, imageRef);
...
}
Run Code Online (Sandbox Code Playgroud)
现在我试图为该视图的大小调整设置动画.
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
// change frame of view
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
我期望的是平铺区域只是增长,使瓷砖尺寸保持不变.相反,当区域增长时,视图的原始内容将缩放到新大小.至少在动画期间.所以在动画的开头和结尾都很好.在动画期间,瓷砖会扭曲.
为什么CA试图扩展?我怎么能阻止它这样做?我错过了什么?
dun*_*cox 15
如果Core Animation必须为每个动画帧回调你的代码,它将永远不会像现在这样快,并且自定义属性的动画一直是Mac上CA的长期请求功能和常见问题解答.
使用UIViewContentModeRedraw是在正确的轨道上,也是你从CA获得的最好的.问题是从UIKit的角度来看,框架只有两个值:转换开始时的值和转换结束时的值,这就是你所看到的.如果查看Core Animation体系结构文档,您将看到CA如何拥有所有图层属性的私有表示,并且它们的值随时间而变化.这就是帧插值发生的地方,并且当它们发生时你无法得到通知.
所以唯一的方法是使用NSTimer(或performSelector:withObject:afterDelay:)随着时间的推移改变视图框架,这是老式的方式.
| 归档时间: |
|
| 查看次数: |
15844 次 |
| 最近记录: |