Получить все координаты X, Y между двумя точками в объективе C

Как получить все координаты X, Y между двумя точками. Я хочу переместить UIButton по диагонали в объекте C. Пример. Переместить UIButton из положения «Точка A» в положение «Точка B».

.Point B . Point A 

Заранее спасибо.

вы можете использовать линейный алгоритм Брешенема

Вот немного упрощенная версия, я использовал кучу раз

 +(NSArray*)getAllPointsFromPoint:(CGPoint)fPoint toPoint:(CGPoint)tPoint { /*Simplified implementation of Bresenham's line algoritme */ NSMutableArray *ret = [NSMutableArray array]; float deltaX = fabsf(tPoint.x - fPoint.x); float deltaY = fabsf(tPoint.y - fPoint.y); float x = fPoint.x; float y = fPoint.y; float err = deltaX-deltaY; float sx = -0.5; float sy = -0.5; if(fPoint.x<tPoint.x) sx = 0.5; if(fPoint.y<tPoint.y) sy = 0.5; do { [ret addObject:[NSValue valueWithCGPoint:CGPointMake(x, y)]]; float e = 2*err; if(e > -deltaY) { err -=deltaY; x +=sx; } if(e < deltaX) { err +=deltaX; y+=sy; } } while (round(x) != round(tPoint.x) && round(y) != round(tPoint.y)); [ret addObject:[NSValue valueWithCGPoint:tPoint]];//add final point return ret; } 

Если вы просто хотите анимировать UIControl из одного места в другое, вы можете использовать UIAnimation :

 [UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionCurveLinear animations:^{ btn.center = CGPointMake(<NEW_X>, <NEW_Y>) } completion:^(BOOL finished) { }]; 

Для этого вам действительно нужно использовать Core Animation. Вам просто нужно указать новое происхождение для вашей UIButton и Core Animation. Остальное:

  [UIView animateWithDuration:0.3 animations:^{ CGRect frame = myButton.frame; frame.origin = CGPointMake(..new X.., ..new Y..); myButton.frame = frame; }]; 

Эта версия линейного алгоритма Брешенема хорошо работает с горизонтальной линией:

 + (NSArray*)getAllPointsFromPoint:(CGPoint)fPoint toPoint:(CGPoint)tPoint { /* Bresenham's line algorithm */ NSMutableArray *ret = [NSMutableArray array]; int x1 = fPoint.x; int y1 = fPoint.y; int x2 = tPoint.x; int y2 = tPoint.y; int dy = y2 - y1; int dx = x2 - x1; int stepx, stepy; if (dy < 0) { dy = -dy; stepy = -1; } else { stepy = 1; } if (dx < 0) { dx = -dx; stepx = -1; } else { stepx = 1; } dy <<= 1; // dy is now 2*dy dx <<= 1; // dx is now 2*dx [ret addObject:[NSValue valueWithCGPoint:CGPointMake(x1, y1)]]; if (dx > dy) { int fraction = dy - (dx >> 1); // same as 2*dy - dx while (x1 != x2) { if (fraction >= 0) { y1 += stepy; fraction -= dx; // same as fraction -= 2*dx } x1 += stepx; fraction += dy; // same as fraction -= 2*dy [ret addObject:[NSValue valueWithCGPoint:CGPointMake(x1, y1)]]; } } else { int fraction = dx - (dy >> 1); while (y1 != y2) { if (fraction >= 0) { x1 += stepx; fraction -= dy; } y1 += stepy; fraction += dx; [ret addObject:[NSValue valueWithCGPoint:CGPointMake(x1, y1)]]; } } return ret; } 

Для Swift 3.0,

  func findAllPointsBetweenTwoPoints(startPoint : CGPoint, endPoint : CGPoint) { var allPoints :[CGPoint] = [CGPoint]() let deltaX = fabs(endPoint.x - startPoint.x) let deltaY = fabs(endPoint.y - startPoint.y) var x = startPoint.x var y = startPoint.y var err = deltaX-deltaY var sx = -0.5 var sy = -0.5 if(startPoint.x<endPoint.x){ sx = 0.5 } if(startPoint.y<endPoint.y){ sy = 0.5; } repeat { let pointObj = CGPoint(x: x, y: y) allPoints.append(pointObj) let e = 2*err if(e > -deltaY) { err -= deltaY x += CGFloat(sx) } if(e < deltaX) { err += deltaX y += CGFloat(sy) } } while (round(x) != round(endPoint.x) && round(y) != round(endPoint.y)); allPoints.append(endPoint) } 
  • Центральная координата набора CLLocationsCoordinate2D
  • Преобразование десятичной координаты в градусы, минуты, секунды, направление
  • Как рисовать линию с учетом центральной точки и угла в iOS?
  • Местоположение GPS на iOS и Android
  • Перекрывающиеся круговые кнопки и тестирование Hit / Tap
  • Поиск координат касания жестов с использованием locationOfTouch
  • Как я могу получить кадр ячейки представления таблицы в координатном пространстве представления таблицы?
  • Доступ к существующему UITableViewCell
  • Давайте будем гением компьютера.