小妹想在游戏的大地图实现 缩放以2个手指中间点为锚点 移动则以Layer的左下角 下面是代码
-(void) handlePinchFrom:(UIPinchGestureRecognizer*)recognizer
{
static float lastScale;
if([recognizer state] == UIGestureRecognizerStateBegan)
{
lastScale = m_layer.scale;
}
m_nowScale = (lastScale - 1) + recognizer.scale;
m_nowScale = MIN(m_nowScale, 1.5f); //设置缩放上限
m_nowScale = MAX(m_nowScale, m_winSize.width/BIGMAP_WIDTH); //设置缩放下限
if ([recognizer numberOfTouches] == 2) {
[m_layer setContentSize:CGSizeMake(BIGMAP_WIDTH, BIGMAP_HEIGHT)];
CGPoint position1 = [recognizer locationOfTouch:0 inView:[[CCDirector sharedDirector] view]];
CGPoint position2 = [recognizer locationOfTouch:1 inView:[[CCDirector sharedDirector] view]];
position1 = CGPointMake(position1.x, m_winSize.height-position1.y);
position2 = CGPointMake(position2.x, m_winSize.height-position2.y);
CGPoint centerPosition = CGPointMake(((position1.x+position2.x)/2.0f-m_layer.position.x)/m_layer.contentSize.width,
((position1.y+position2.y)/2.0f-m_layer.position.y)/m_layer.contentSize.height);
NSLog(@"%f, %f", centerPosition.x, centerPosition.y);
[m_layer setAnchorPoint:centerPosition];
NSLog(@"%f, %f", m_layer.anchorPoint.x, m_layer.anchorPoint.y);
}
[m_layer setScale:m_nowScale];
//这里不写 缩放正常 移动不正常 不写移动正常 缩放不正常
if (!CGPointEqualToPoint(m_layer.anchorPoint, CGPointZero)) {
[m_layer setAnchorPoint:CGPointZero];
}
//
if (m_layer.position.x >= 0) {
[m_layer setPosition:CGPointMake(0, m_layer.position.y)];
}
else if (m_layer.position.x+BIGMAP_WIDTH*m_nowScale < m_winSize.width) {
[m_layer setPosition:CGPointMake(m_winSize.width-BIGMAP_WIDTH*m_nowScale, m_layer.position.y)];
}
if (m_layer.position.y >= 0) {
[m_layer setPosition:CGPointMake(m_layer.position.x, 0)];
}
else if (m_layer.position.y+BIGMAP_HEIGHT*m_nowScale < m_winSize.height) {
[m_layer setPosition:CGPointMake(m_layer.position.x, m_winSize.height-BIGMAP_HEIGHT*m_nowScale)];
}
}
-(void) handlePinchFrom:(UIPinchGestureRecognizer*)recognizer
{
static float lastScale;
if([recognizer state] == UIGestureRecognizerStateBegan)
{
lastScale = m_layer.scale;
}
m_nowScale = (lastScale - 1) + recognizer.scale;
m_nowScale = MIN(m_nowScale, 1.5f); //设置缩放上限
m_nowScale = MAX(m_nowScale, m_winSize.width/BIGMAP_WIDTH); //设置缩放下限
if ([recognizer numberOfTouches] == 2) {
[m_layer setContentSize:CGSizeMake(BIGMAP_WIDTH, BIGMAP_HEIGHT)];
CGPoint position1 = [recognizer locationOfTouch:0 inView:[[CCDirector sharedDirector] view]];
CGPoint position2 = [recognizer locationOfTouch:1 inView:[[CCDirector sharedDirector] view]];
position1 = CGPointMake(position1.x, m_winSize.height-position1.y);
position2 = CGPointMake(position2.x, m_winSize.height-position2.y);
CGPoint centerPosition = CGPointMake(((position1.x+position2.x)/2.0f-m_layer.position.x)/m_layer.contentSize.width,
((position1.y+position2.y)/2.0f-m_layer.position.y)/m_layer.contentSize.height);
NSLog(@"%f, %f", centerPosition.x, centerPosition.y);
[m_layer setAnchorPoint:centerPosition];
NSLog(@"%f, %f", m_layer.anchorPoint.x, m_layer.anchorPoint.y);
}
[m_layer setScale:m_nowScale];
//这里不写 缩放正常 移动不正常 不写移动正常 缩放不正常
if (!CGPointEqualToPoint(m_layer.anchorPoint, CGPointZero)) {
[m_layer setAnchorPoint:CGPointZero];
}
//
if (m_layer.position.x >= 0) {
[m_layer setPosition:CGPointMake(0, m_layer.position.y)];
}
else if (m_layer.position.x+BIGMAP_WIDTH*m_nowScale < m_winSize.width) {
[m_layer setPosition:CGPointMake(m_winSize.width-BIGMAP_WIDTH*m_nowScale, m_layer.position.y)];
}
if (m_layer.position.y >= 0) {
[m_layer setPosition:CGPointMake(m_layer.position.x, 0)];
}
else if (m_layer.position.y+BIGMAP_HEIGHT*m_nowScale < m_winSize.height) {
[m_layer setPosition:CGPointMake(m_layer.position.x, m_winSize.height-BIGMAP_HEIGHT*m_nowScale)];
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货