iphone - 如何为 View 转换的一部分设置动画

标签 iphone objective-c ios uiview cgaffinetransform

我最近偶然发现了一个问题,我有一个可以由用户旋转的 View 。然而,在旋转过程中,它应该大 10%(按比例放大)。

我希望缩放是动画的,但旋转是立即可见的,因为我在手势识别器的回调中将其设置为没有动画。

问题:是否可以在不拦截动画缩放的情况下更新 CGAffineTransform 的旋转,或者是否无法创建可缩放的环绕 View ?

最佳答案

编辑:

我认为用于缩放的包装 View 是最不容易出错的方法。

如果您迫切希望避免这种情况,您可以尝试使用 NSTimer 手动创建缩放动画。也许如果您先查询当前的变换值,然后修改它,而不是用独立创建的变换值(用于旋转和缩放)替换它,它就可以工作。

我认为隐式 UIView 动画会在开始时计算所有后续值,因此这会扰乱您的旋转。

另一种方法是在缩放时锁定旋转。缺点是缩放和旋转不能同时进行。不管怎样,你可以创建一个 iVar 或属性,比如 rotationLocked 并做某事。像这样:

- (void)handlePan:(UIPanGestureRecognizer *)gr
{
    if (gr.state == UIGestureRecognizerStateBegan)
    {
        self.rotationLocked = YES;
        [UIView animateWithDuration:.2 animations:^{
            [self scaleView];
        }completion:^{ self.rotationLocked = NO; };
    }
    if (gr.state == UIGestureRecognizerStateChanged)
    {
        if (!self.rotationLocked){
            // do the rotation
    }
    if (gr.state == UIGestureRecognizerStateEnded)
    {
        // do something else
    }

关于iphone - 如何为 View 转换的一部分设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13107685/

相关文章:

iphone - 运行 Clean My Mac 删除开发垃圾文件后,Xcode 项目将无法构建

iphone - 具有多个可见页面或较小页面大小的 UIScrollView

ios - UIScrollview - 如何在滚动屏幕时使 subview 变小

iOS Facebook SDK - 获取与应用程序连接的 friend 列表

android - 如何从我的 Flutter 应用程序控制网络缓存?

ios - Coredata 获取托管对象,而对象的其他实例正在编辑导致崩溃

objective-c - 删除特定的本地通知

ios - 如何为 MKMapKit View 编写代码当用户单击 pin 时,它会显示另一个容器 View ?

objective-c - UITextField显示异常

iphone - 在某个应用版本被拒绝后,您是否需要将应用内购买 (IAP) 重新附加到该应用版本?