Toggle navigation
Toggle navigation
This project
Loading...
Sign in
尹诚
/
Mapbox-iOS-SDK
·
Commits
Go to a project
GitLab
Go to dashboard
Project
Activity
Files
Commits
Pipelines
0
Builds
0
Graphs
Milestones
Issues
0
Merge Requests
0
Members
Labels
Wiki
Forks
Network
Create a new issue
Download as
Email Patches
Plain Diff
Browse Files
Authored by
Thomas Rasch
13 years ago
Commit
fab8260b6c3df1c09c4d740b37725e636cfd2fcf
1 parent
42603cfc
o Removed an unnecessary constraints check since this is done in scrollView:correctedContentSize
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
4 additions
and
77 deletions
MapView/Map/RMMapView.m
MapView/Map/RMMapView.m
View file @
fab8260
...
...
@@ -679,7 +679,7 @@
return
NO
;
}
-
(
void
)
zoom
Content
ByFactor
:
(
float
)
zoomFactor
near
:
(
CGPoint
)
pivot
animated
:
(
BOOL
)
animated
-
(
void
)
zoomByFactor
:
(
float
)
zoomFactor
near
:
(
CGPoint
)
pivot
animated
:
(
BOOL
)
animated
{
if
(
!
[
self
tileSourceBoundsContainScreenPoint
:
pivot
])
return
;
...
...
@@ -765,7 +765,7 @@
}
// RMLog(@"zoom in from:%f to:%f by factor:%f around {%f,%f}", [self zoom], newZoom, factor, pivot.x, pivot.y);
[
self
zoom
Content
ByFactor
:
factor
near
:
pivot
animated
:
animated
];
[
self
zoomByFactor
:
factor
near
:
pivot
animated
:
animated
];
}
-
(
void
)
zoomOutToNextNativeZoomAt
:
(
CGPoint
)
pivot
...
...
@@ -790,80 +790,7 @@
}
// RMLog(@"zoom out from:%f to:%f by factor:%f around {%f,%f}", [self zoom], newZoom, factor, pivot.x, pivot.y);
[
self
zoomContentByFactor
:
factor
near
:
pivot
animated
:
animated
];
}
-
(
void
)
zoomByFactor
:
(
float
)
zoomFactor
near
:
(
CGPoint
)
center
animated
:
(
BOOL
)
animated
{
if
(
_constrainMovement
)
{
// check that bounds after zoom don't exceed map constraints
float
_zoomFactor
=
[
self
adjustedZoomForCurrentBoundingMask
:
zoomFactor
];
float
zoomDelta
=
log2f
(
_zoomFactor
);
float
targetZoom
=
zoomDelta
+
[
self
zoom
];
BOOL
canZoom
=
NO
;
if
(
targetZoom
==
[
self
zoom
])
{
//OK... . I could even do a return here.. but it will hamper with future logic..
canZoom
=
YES
;
}
// clamp zoom to remain below or equal to maxZoom after zoomAfter will be applied
if
(
targetZoom
>
[
self
maxZoom
])
zoomFactor
=
exp2f
([
self
maxZoom
]
-
[
self
zoom
]);
// clamp zoom to remain above or equal to minZoom after zoomAfter will be applied
if
(
targetZoom
<
[
self
minZoom
])
zoomFactor
=
1
/
exp2f
([
self
zoom
]
-
[
self
minZoom
]);
// bools for syntactical sugar to understand the logic in the if statement below
BOOL
zoomAtMax
=
([
self
zoom
]
==
[
self
maxZoom
]);
BOOL
zoomAtMin
=
([
self
zoom
]
==
[
self
minZoom
]);
BOOL
zoomGreaterMin
=
([
self
zoom
]
>
[
self
minZoom
]);
BOOL
zoomLessMax
=
([
self
zoom
]
<
[
self
maxZoom
]);
//zooming in zoomFactor > 1
//zooming out zoomFactor < 1
if
((
zoomGreaterMin
&&
zoomLessMax
)
||
(
zoomAtMax
&&
zoomFactor
<
1
)
||
(
zoomAtMin
&&
zoomFactor
>
1
))
{
// if I'm here it means I could zoom, now we have to see what will happen after zoom
// get copies of mercatorRoScreenProjection's data
RMProjectedPoint
origin
=
[
self
projectedOrigin
];
CGRect
screenBounds
=
self
.
bounds
;
// this is copied from [RMMercatorToScreenBounds zoomScreenByFactor]
// First we move the origin to the pivot...
origin
.
x
+=
center
.
x
*
metersPerPixel
;
origin
.
y
+=
(
screenBounds
.
size
.
height
-
center
.
y
)
*
metersPerPixel
;
// Then scale by 1/factor
metersPerPixel
/=
_zoomFactor
;
// Then translate back
origin
.
x
-=
center
.
x
*
metersPerPixel
;
origin
.
y
-=
(
screenBounds
.
size
.
height
-
center
.
y
)
*
metersPerPixel
;
// calculate new bounds
RMProjectedRect
zRect
;
zRect
.
origin
=
origin
;
zRect
.
size
.
width
=
screenBounds
.
size
.
width
*
metersPerPixel
;
zRect
.
size
.
height
=
screenBounds
.
size
.
height
*
metersPerPixel
;
// // can zoom only if within bounds
// canZoom = !(zRect.origin.y < _southWestConstraint.y || zRect.origin.y+zRect.size.height > _northEastConstraint.y ||
// zRect.origin.x < _southWestConstraint.x || zRect.origin.x+zRect.size.width > _northEastConstraint.x);
}
if
(
!
canZoom
)
{
RMLog
(
@"Zooming will move map out of bounds: no zoom"
);
return
;
}
}
[
self
zoomContentByFactor
:
zoomFactor
near
:
center
animated
:
animated
];
[
self
zoomByFactor
:
factor
near
:
pivot
animated
:
animated
];
}
#pragma mark -
...
...
@@ -1540,7 +1467,7 @@
{
double
factor
=
self
.
metersPerPixel
/
newMetersPerPixel
;
[
self
zoom
Content
ByFactor
:
factor
near
:
CGPointMake
(
self
.
bounds
.
size
.
width
/
2
.
0
,
self
.
bounds
.
size
.
height
/
2
.
0
)
animated
:
animated
];
[
self
zoomByFactor
:
factor
near
:
CGPointMake
(
self
.
bounds
.
size
.
width
/
2
.
0
,
self
.
bounds
.
size
.
height
/
2
.
0
)
animated
:
animated
];
}
-
(
double
)
scaledMetersPerPixel
...
...
Please
register
or
login
to post a comment