2017-02-23 90 views
0

我有我编程创建的UIButton。其实它不应该是UIButton,我只需要有可能在图像上方标记一些区域。UIButton - 移动和缩放

所以我需要它的功能 - 移动对象并调整它的大小。对于这个我有2种方法:

- (void) objMove:(id) sender withEvent:(UIEvent *) event 
{ 
UIControl *control = sender; 
UITouch *t = [[event allTouches] anyObject]; 
CGPoint pPrev = [t previousLocationInView:control]; 
CGPoint p = [t locationInView:control]; 
CGPoint center = control.center; 
center.x += p.x - pPrev.x; 
center.y += p.y - pPrev.y; 
control.center = center; 
} 

- (void)objScale:(UIPinchGestureRecognizer *)recognizer 
{ 
UIView *pinchView = recognizer.view; 
CGRect bounds = pinchView.bounds; 
CGPoint pinchCenter = [recognizer locationInView:pinchView]; 
pinchCenter.x -= CGRectGetMidX(bounds); 
pinchCenter.y -= CGRectGetMidY(bounds); 
CGAffineTransform transform = pinchView.transform; 
transform = CGAffineTransformTranslate(transform, pinchCenter.x, pinchCenter.y); 
CGFloat scale = recognizer.scale; 
transform = CGAffineTransformScale(transform, scale, scale); 
transform = CGAffineTransformTranslate(transform, -pinchCenter.x, -pinchCenter.y); 
pinchView.transform = transform; 
recognizer.scale = 1.0; 
} 

规模工程确定。移动看起来不错,直到我改变对象的大小 - 当我增加对象时,它变得比手指慢,反之亦然 - 如果对象比原始对象小,它的移动速度比手指快。为什么它像这样工作?

+1

您是否尝试过在更改大小后更新按钮大小?当你尝试移动它时,他可能会对旧尺寸作出反应 –

+0

@Ricardo Alves,我已经试过了,像这样'pinchView.frame = CGRectMake(bounds.origin.x,bounds.origin.y,bounds.origin.x + bounds.size.width,bounds.origin.y + bounds.size.height);'在'objScale'中打破scale =( – user5599807

回答

2

我想你应该得到的startPoint和StartCenter在在

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 
// get startPoint and startCenter here 
} 

- (void) objMove:(id) sender withEvent:(UIEvent *) event 
{ 
UIControl *control = sender; 
UITouch *t = [[event allTouches] anyObject]; 
CGPoint p = [t locationInView:control]; 
startCenter.x += p.x - startPoint.x; 
startCenter.y += p.y - startPoint.y; 
control.center = startCenter; 
} 

改变这样的代码,也许它的工作原理。

您的中心是当前中心,p是当前点,pPrev是前一个点。 当前中心添加上一个点移动的大小是错误的。 你应该得到相对距离,而不是动态距离。