Измените размер UIView только с концов, используя UIPanGestureRecognizer

У меня есть вертикальная линия (UIView), размер которой мне нужно изменить. В настоящее время я делаю это с помощью жеста щипка, но теперь мне нужно сделать это с помощью жеста смахивания и увеличить или уменьшить высоту со стороны, с которой я смахиваю. Так, например, если я прокручиваю вниз от ВЕРХНЕГО КОНЦА линии, размер линии должен уменьшаться только сверху. Нижняя часть должна оставаться закрепленной в исходном положении. Как мне это сделать?

Мне также нужно иметь возможность перемещать изображение, что я уже реализовал с помощью UIPanGestureRecognizer.

Вот с чем я поигрался: у меня есть небольшой UIView на верхнем конце вертикальной линии и один на нижнем конце линии. Я использую их как маркеры. Теперь я могу перемещать верхний маркер вверх и вниз. Мне нужно изменить размер линии на расстояние между двумя маркерами и сохранить нижний конец линии в том же положении, что и нижний маркер.

Это то, что у меня есть

func draggedViewForTopMarker(sender: UIPanGestureRecognizer) {
      //To move the top marker
        var translation = sender.translationInView(self.view)
        sender.view!.center = CGPointMake(sender.view!.center.x, sender.view!.center.y + translation.y)
        sender.setTranslation(CGPointZero, inView: self.view)
      //Find distance between the markers
        var distanceBetweenMarkers = (sender.view!.center.y + translation.y) - self.bottomMarker.center.y
        print(distanceBetweenMarkers)
        if (distanceBetweenMarkers < 0) {
            distanceBetweenMarkers = distanceBetweenMarkers*(-1)
        }
      //**TRYING** to resize the line to have the same height as the distance between the two markers AND make sure its positioned between the markers and the bottom end of the line is still in the same place as it was originally. 
        var newFrame = CGRectMake(sender.view!.center.x, distanceBetweenMarkers/2, vertical.frame.width, distanceBetweenMarkers)
        vertical.frame = newFrame
    }

Я также открыт для разных подходов или решения проблемы, которая у меня есть с этим подходом!

Вы можете проверить Photo Measures Lite в App Store, чтобы лучше понять, что я имею в виду, когда говорю «изменить размер линии только с одной стороны».

Большое спасибо!


person bobMarshal    schedule 18.12.2015    source источник


Ответы (1)


вместо того, чтобы создавать новый кадр, вы можете просто отрегулировать положение линии y так, чтобы оно совпадало с верхним маркером, а высота — совпадать с расстоянием между двумя маркерами.

func draggedViewForTopMarker(sender: UIPanGestureRecognizer) {
  //To move the top marker
    var translation = sender.translationInView(self.view)
    sender.view!.center = CGPointMake(sender.view!.center.x, sender.view!.center.y + translation.y)
    sender.setTranslation(CGPointZero, inView: self.view)
  //Find distance between the markers
    var distanceBetweenMarkers = self.topMarker.frame.origin.y - self.bottomMarker.frame.origin.y
vertical.frame.origin.y = self.topMarker.frame.origin.y
vertical.frame.size.height = distanceBetweenMarkers
}

Но это будет работать только в том случае, если два маркера и вертикальная линия являются подпредставлениями одного и того же суперпредставления.

person Gili Tiko    schedule 27.01.2016