البرمجة

تحريك زجاجة باستخدام UIGestureRecognizer في Swift

لتحقيق هذا السلوك، يمكنك استخدام UIGestureRecognizer لتحديد سرعة واتجاه حركة إصبع المستخدم. يمكنك استخدام هذه المعلومات لتحديث سرعة دوران الزجاجة. هناك عدة طرق لتحقيق ذلك، وإليك مثالاً بسيطاً يستخدم UIPanGestureRecognizer لتحقيق هذا الهدف:

  1. أضف متغيرين لتتبع موقع اللمسة السابقة والوقت الماضي من أجل حساب السرعة.

  2. استخدم دالة التعريف لـ UIPanGestureRecognizer لتحديث سرعة الدوران عند كل تحريك.

  3. اعتمادًا على اتجاه الحركة، يمكنك زيادة أو تقليل سرعة الدوران.

قد تحتاج إلى ضبط القيم بحسب احتياجات مشروعك، ولكن الفكرة العامة هي استخدام الحركة والسرعة لتحديث الرسومات.

المزيد من المعلومات

لتحقيق هذا السلوك، يمكنك استخدام UIPanGestureRecognizer لتحديد سرعة واتجاه حركة إصبع المستخدم. يمكنك استخدام هذه المعلومات لتحديث سرعة دوران الزجاجة. إليك مثالاً بسيطاً يستخدم UIPanGestureRecognizer لتحقيق هذا الهدف:

  1. أضف متغيرين لتتبع موقع اللمسة السابقة والوقت الماضي من أجل حساب السرعة.

  2. استخدم دالة التعريف لـ UIPanGestureRecognizer لتحديث سرعة الدوران عند كل تحريك.

  3. اعتمادًا على اتجاه الحركة، يمكنك زيادة أو تقليل سرعة الدوران.

قد تحتاج إلى ضبط القيم بحسب احتياجات مشروعك، ولكن الفكرة العامة هي استخدام الحركة والسرعة لتحديث الرسومات.

هنا مثال لكيفية تنفيذ هذا المفهوم:

swift
var lastPanPoint: CGPoint? var lastPanTime: TimeInterval? @IBAction func handlePan(_ recognizer: UIPanGestureRecognizer) { if recognizer.state == .began { lastPanPoint = recognizer.location(in: view) lastPanTime = CACurrentMediaTime() } else if recognizer.state == .changed { let currentPanPoint = recognizer.location(in: view) let currentTime = CACurrentMediaTime() let distanceX = currentPanPoint.x - lastPanPoint!.x let distanceY = currentPanPoint.y - lastPanPoint!.y let distance = sqrt(distanceX * distanceX + distanceY * distanceY) let deltaTime = currentTime - lastPanTime! let rotateView = CABasicAnimation() rotateView.fromValue = 0 rotateView.toValue = Float(distance) * Float(M_PI) / 180.0 rotateView.duration = deltaTime rotateView.repeatCount = 0 rotateView.removedOnCompletion = false rotateView.fillMode = .forwards rotateView.timingFunction = CAMediaTimingFunction(name: .easeOut) bottleImageView.layer.add(rotateView, forKey: "transform.rotation.z") lastPanPoint = currentPanPoint lastPanTime = currentTime } }

في هذا المثال، نقوم بحساب المسافة والزمن بين نقاط اللمسة لتحديث سرعة دوران الزجاجة. تحقق من قيم الثوابت والعمليات الحسابية للتأكد من أنها تتناسب مع احتياجات تطبيقك.

زر الذهاب إلى الأعلى