我试图模仿雅虎天气应用程序在城市之间的屏幕转换,我无法弄清楚它是什么转换。有什么线索吗?
我真的很感谢你的时间。谢谢
编辑:
我有具有子视图的 slideView ctrler。滑块视图有图像,子视图有文本。当我进行滑动时,带有文本的文本视图必须以较慢的速度移动和拖动视图控制器,并且该实习生应该开始在下一个视图控制器中拖动,这是滑块 Ctrler 的一个实例。
我试图模仿雅虎天气应用程序在城市之间的屏幕转换,我无法弄清楚它是什么转换。有什么线索吗?
我真的很感谢你的时间。谢谢
编辑:
我有具有子视图的 slideView ctrler。滑块视图有图像,子视图有文本。当我进行滑动时,带有文本的文本视图必须以较慢的速度移动和拖动视图控制器,并且该实习生应该开始在下一个视图控制器中拖动,这是滑块 Ctrler 的一个实例。
没有内置的转换可以为您执行此操作(我假设您正在谈论以与视图本身不同的速率转换其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];
}
}
因此,当我平移时,这两个图像在它们的剪辑帧内居中:
这是这个想法的一个非常基本的实现。但是,有大量的实现细节(自定义容器与子视图,自动布局与非,等等),所以在您回答其中一些问题之前,很难更具体。
它不是默认设置,但我在旧应用程序中实现了类似的效果
isFromLeftSide
在您的视图和相应的检测集上注册手势
呼叫跟随。根据您的要求进行微调
[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
}];