0

我试图模仿雅虎天气应用程序在城市之间的屏幕转换,我无法弄清楚它是什么转换。有什么线索吗?

我真的很感谢你的时间。谢谢

编辑:

我有具有子视图的 slideView ctrler。滑块视图有图像,子视图有文本。当我进行滑动时,带有文本的文本视图必须以较慢的速度移动和拖动视图控制器,并且该实习生应该开始在下一个视图控制器中拖动,这是滑块 Ctrler 的一个实例。

4

2 回答 2

1

没有内置的转换可以为您执行此操作(我假设您正在谈论以与视图本身不同的速率转换其frame/的图像)。center你可能不得不自己写。需要对手势识别器和视图动画有一些基本的了解。

center基本效果是在更改frame这些视图(或其超级视图)时同时调整两个图像视图的属性。contentMode(或者,您可以通过拥有is的图像视图UIViewContentModeCenter并仅更改frame.)来实现此目的。)我建议您从效果的一些简单测试开始,然后从那里构建。

例如,我创建了一个有两个图像视图的场景,其自动布局约束定义如下:

H:|[leftImageView][rightImageView]|
V:|[左图像视图]|
V:|[右图像视图]|

然后我为 定义了一个宽度约束leftImageView,并将它连接到IBOutlet该约束的一个,例如leftImageWidthConstraint. 然后我有一个UIPanGestureRecognizer可以处理手势,只需leftImageWidthConstraint相应地更改它(并且使用自动布局,框架的其余部分会自动为我计算):

- (void)handlePan:(UIPanGestureRecognizer *)gesture
{
    CGPoint translate = [gesture translationInView:gesture.view];
    static CGFloat width;

    if (gesture.state == UIGestureRecognizerStateBegan)
    {
        width = self.leftImageWidthConstraint.constant;
    }

    CGFloat newWidth = width + translate.x;

    if (newWidth < 0)
        newWidth = 0;
    else if (newWidth > self.view.bounds.size.width)
        newWidth = self.view.bounds.size.width;

    self.leftImageWidthConstraint.constant = newWidth;

    // if you let go, animate the views to their final position

    if (gesture.state == UIGestureRecognizerStateEnded)
    {
        // if more than half way, set left view's target width to take up full width, 
        // otherwise set left view's target width to zero

        if (newWidth > (self.view.bounds.size.width / 2.0))
            newWidth = self.view.bounds.size.width;
        else
            newWidth = 0;

        // animate the changing of the constraint (and thus the `frame`) accordingly

        self.leftImageWidthConstraint.constant = newWidth;
        [UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{
            [self.view layoutIfNeeded];
        } completion:nil];
    }
}

因此,当我平移时,这两个图像在它们的剪辑帧内居中​​:

在此处输入图像描述

这是这个想法的一个非常基本的实现。但是,有大量的实现细节(自定义容器与子视图,自动布局与非,等等),所以在您回答其中一些问题之前,很难更具体。

于 2013-10-25T20:42:37.733 回答
0

它不是默认设置,但我在旧应用程序中实现了类似的效果

  1. isFromLeftSide在您的视图和相应的检测集上注册手势

  2. 呼叫跟随。根据您的要求进行微调

     [self.view addSubview:mySlidingView];
            mySlidingView.frame = // set offscreen frame, in the direction you want it to appear from depending on flag isFromLeftSide
            [UIView animateWithDuration:8.0 
                             animations:^{
                                 mySlidingView.frame = // desired end location
                                    }];
    
于 2013-10-25T20:25:45.993 回答