2017-02-23 82 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是前一個點。 當前中心添加上一個點移動的大小是錯誤的。 你應該得到相對距離,而不是動態距離。