如果您的app中使用了某一个tab页面来展示地图,就需要考虑对滑动手势进行区分,以便既能支持滑动地图,又能支持切换tab。
该demo给出了示例:快速滑动、从侧边开始滑动,则切换tab;否则滑动地图。
详细效果请见右侧视频。
核心类/接口
类 | 接口 | 说明 | 版本 |
---|---|---|---|
UIPanGestureRecognizer | ---- | 系统手势 | ---- |
实现手势处理
- (void)panHandler:(UIPanGestureRecognizer *)gesture
{
// NSLog(@"vvv %f, %f", [gesture velocityInView:_scrollView].x, [gesture velocityInView:_scrollView].y);
// 设置触发条件
if (gesture.state != UIGestureRecognizerStateEnded)
{
return;
}
if (fabs([gesture velocityInView:_scrollView].x) > 1200)
{
// -1 向左,1 向右
int direction = fabs([gesture velocityInView:_scrollView].x) / [gesture velocityInView:_scrollView].x;
int validIdx = 1;
if (_currentIndex == validIdx && !_scrollView.isDecelerating)
{
CGFloat width = _scrollView.frame.size.width * (1 - direction);
[_scrollView setContentOffset:CGPointMake(width, 0) animated:YES];
}
}
}
设置允许和scrollview上pan手势并发
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
如果您的app中使用了某一个tab页面来展示地图,就需要考虑对滑动手势进行区分,以便既能支持滑动地图,又能支持切换tab。
该demo给出了示例:从侧边开始滑动,则切换tab;否则滑动地图。
详细效果请见右侧视频。
核心类/接口
类 | 接口 | 说明 | 版本 |
---|---|---|---|
MapsInitializer | initialize(Context paramContext) | 初始化高德地图Android API,为使用它包含的类做准备。 在这些类中,您如果正在使用MapFragment或MapView,并且调用getMap()获得非空的地图,您可以不需要调用这个方法。 | V2.0.2起 |
TextureSupportMapFragment | newInstance() | 使用默认的选项创建TextureSupportMapFragment | V3.1.0起 |
public class ScrollViewPager extends ViewPager {
public ScrollViewPager(Context context) {
super(context);
}
public ScrollViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
if (Math.abs(dx) > 50) {
return super.canScroll(v, checkV, dx, x, y);
} else {
return true;
}
}
}
try {
MapsInitializer.initialize(this.getApplicationContext()); //初始化TextureSupportMapFragment需要先设置context
} catch (RemoteException e) {
e.printStackTrace();
}
mMapFragment = TextureSupportMapFragment.newInstance();
mFragments.add(mMapFragment);