Nano Hash - криптовалюты, майнинг, программирование

Рисование кругов с радиусом, равным пути пальца

Я хочу создать приложение, в котором пользователь кладет один палец на экран, а на экране рисуется круг. Центр круга находится там, где пользователь коснулся экрана. Пользователь перемещает палец, чтобы увеличить радиус круга. Пока пользователь двигает пальцем, рисуется круг с краем круга под пальцем пользователя.

Прямо сейчас мой код создает круги случайного радиуса с центром в том месте, где пользователь коснулся экрана. Мне нужна помощь в выяснении того, как сделать радиус круга зависимым от пути пальца пользователя.

Итак, у меня есть класс CircleView: UIView, который является классом касания какао. В нем реализованы следующие функции:

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = UIColor.clear
    }

    override func draw(_ rect: CGRect) {
        // Get the Graphics Context
        if let context = UIGraphicsGetCurrentContext() {

        // Set the circle outerline-width
        context.setLineWidth(5.0);

        // Set the circle outerline-colour
        UIColor.green.set()

        // Create Circle
        let center = CGPoint(x: frame.size.width/2, y: frame.size.height/2)
        let radius = (frame.size.width - 10)/2
        context.addArc(center: center, radius: radius, startAngle: 0.0, endAngle: .pi * 2.0, clockwise: true)

        // Draw
        context.strokePath()
        }

Мой класс ViewController: UIViewController сейчас имеет следующие функции:

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = UIColor.lightGray
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        for touch in touches {
            // Set the Center of the Circle
            // 1
            let circleCenter = touch.location(in: view)

            // Set a random Circle Radius
            // 2
            let circleWidth = CGFloat(25 + (arc4random() % 50))
            let circleHeight = circleWidth

            // Create a new CircleView
            // 3
            let circleView = CircleView(frame: CGRect(x: circleCenter.x, y: circleCenter.y, width: circleWidth, height: circleHeight))
            view.addSubview(circleView)
        }
    }

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

22.10.2019

  • Просто используйте метод touchesMoved. Сохраните первое касание в touchesBegan и получите расстояние между первым касанием и текущим касанием. Это будет радиус. Нарисуйте круг в touchesEnded 23.10.2019

Ответы:


1

хорошо, согласен с комментарием @Marina. только вам нужно добавить проверку направления пальца пользователя, так как касание вернет CGPoint (x:, y:).

let initialRadius = 0
var currentRadius = 10


func touchBegan(...){ 
initialRadius = currentRadius

}
func touchMoves(...) {

Y = touch(in view).Y
X = touch(in view).x

if direction == vertical {
     currentdistance = substract point Y from first touch (center.Y)
(after that you have to abs() current distance for negative value)
  currentRadius =  abs(currentdistance)

} else if direction == horizontal {  currentdistance = substract point X from first touch  (center.X)
(after that you have to abs() current distance for negative value)
currentRadius =  abs(currentdistance)
} else {

either X or Y

}
}

func touchEnded(...){

drawcircle(radius)
23.10.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..