IOS开发之--拖动图片

@interface APLMoveMeView (){
    @private
    CGPoint startPoint;
}

@end


@implementation APLMoveMeView
@synthesize placardView;
//@synthesize nextDisplayStringIndex;

- (void)setupPlaceCardView:(APLPlacardView*)_placecardViews{
    self.placardView = _placecardViews;
}


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
	
	// We only support single touches, so anyObject retrieves just that touch from touches.
	UITouch *touch = [touches anyObject];
	
	// Only move the placard view if the touch was in the placard view.
	if ([touch view] != self.placardView) {
		// In case of a double tap outside the placard view, update the placard's display string.
		if ([touch tapCount] == 2) {
			[self setupNextDisplayString];
		}
		return;
	}
    CGPoint point = [[touches anyObject] locationInView:self];
    startPoint = point;
    
	// Animate the first touch.
	CGPoint touchPoint = [touch locationInView:self];
	[self animateFirstTouchAtPoint:touchPoint];
}


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
	
	UITouch *touch = [touches anyObject];
	
	// If the touch was in the placardView, move the placardView to its location.
	if ([touch view] == self.placardView) {
//		CGPoint locationss = [touch locationInView:self];
//		self.placardView.center = locationss;

		//计算位移=当前位置-起始位置
        CGPoint point = [[touches anyObject] locationInView:self];
//        float dx = point.x - startPoint.x;
        float dy = point.y - startPoint.y;
        
        //计算移动后的view中心点
        CGPoint newcenter = CGPointMake(startPoint.x, self.center.y + dy);
        
        
        /* 限制用户不可将视图托出屏幕 */
        float halfx = CGRectGetMidX(self.bounds);
        //x坐标左边界
        newcenter.x = MAX(halfx, newcenter.x);
        //x坐标右边界
        newcenter.x = MIN(self.superview.bounds.size.width - halfx, newcenter.x);
        
        //y坐标同理
        float halfy = CGRectGetMidY(self.bounds);
        newcenter.y = MAX(halfy, newcenter.y);
        newcenter.y = MIN(self.superview.bounds.size.height - halfy, newcenter.y);
        
        //移动view
        self.placardView.center = newcenter;
        
        
        return;
	}
    }


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
	
	UITouch *touch = [touches anyObject];
	
	// If the touch was in the placardView, bounce it back to the center.
	if ([touch view] == self.placardView) {
		/*
         Disable user interaction so subsequent touches don't interfere with animation until the placard has returned to the center. Interaction is reenabled in animationDidStop:finished:.
         */
		self.userInteractionEnabled = NO;
		[self animatePlacardViewToCenter];
		return;
	}		
}

使用ios自带实例MoveMe,来实现图片的拖动,限制拖动在屏幕内。下面是更改的部分代码:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值