تضمين المشغلات في SwiftUI
استخدم VideoPlayer وعروض المشغلات المخصصة.
تضمين المشغلات في SwiftUI درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
الفيديو في SwiftUI
يوفر SwiftUI عرض VideoPlayer (من AVKit) لتضمين تشغيل الوسائط بطريقة تصريحية، مع عناصر تحكم مدمجة.
import SwiftUI
import AVKitعرض VideoPlayer
يستقبل VideoPlayer كائن AVPlayer ويصيّره مع عناصر التحكم القياسية بالتشغيل، مثل التشغيل والإيقاف المؤقت وشريط التمرير والعرض بملء الشاشة.
struct PlayerScreen: View {
let player = AVPlayer(url: URL(string: "https://example.com/v.mp4")!)
var body: some View {
VideoPlayer(player: player)
.frame(height: 240)
}
}الاحتفاظ بالمشغّل في الحالة
خزّن AVPlayer في @State حتى يبقى موجودًا أثناء تحديثات العرض. تؤدي إعادة إنشائه مع كل استدعاء لـ body إلى إعادة بدء التشغيل.
struct PlayerScreen: View {
@State private var player = AVPlayer(
url: URL(string: "https://example.com/v.mp4")!)
var body: some View {
VideoPlayer(player: player)
}
}التحكم في التشغيل
تحكم في التشغيل من معدّلات دورة حياة SwiftUI: ابدأ التشغيل عند الظهور وأوقفه مؤقتًا عند الاختفاء، لتجنب استمرار الصوت خارج الشاشة.
VideoPlayer(player: player)
.onAppear { player.play() }
.onDisappear { player.pause() }محتوى تراكبي
يقبل مُهيئ VideoPlayer إغلاقًا تراكبيًا لإضافة واجهة مستخدم مخصصة فوق الفيديو، مثل العناوين والشارات والتسميات التوضيحية.
VideoPlayer(player: player) {
VStack {
Spacer()
Text("Live")
.padding(6)
.background(.red, in: Capsule())
}
}تكرار التشغيل
كرّر التشغيل عبر مراقبة إشعار انتهاء العنصر والتنقل مجددًا إلى الصفر. ويُعد AVPlayerLooper مع مشغّل قوائم انتظار خيارًا آخر.
.onAppear {
NotificationCenter.default.addObserver(
forName: .AVPlayerItemDidPlayToEndTime,
object: player.currentItem, queue: .main) { _ in
player.seek(to: .zero); player.play()
}
}جلسة الصوت للفيديو
اضبط AVAudioSession كي يعمل صوت الفيديو بصورة صحيحة، سواء باحترام مفتاح كتم الصوت أو بالتشغيل من خلاله حسب رغبتك.
try? AVAudioSession.sharedInstance().setCategory(.playback)مشغلات مخصصة باستخدام UIViewRepresentable
عندما تحتاج إلى واجهة مستخدم مخصصة بالكامل (من دون عناصر تحكم النظام)، غلّف AVPlayerLayer داخل UIViewRepresentable بدلًا من استخدام VideoPlayer.
struct PlayerLayerView: UIViewRepresentable {
let player: AVPlayer
func makeUIView(context: Context) -> UIView { PlayerUIView(player: player) }
func updateUIView(_ uiView: UIView, context: Context) { }
}عرض UIView الداعم
يستضيف UIView المخصص طبقة AVPlayerLayer ويعيد تحجيمها لتطابق حدوده، مما يوفر سطح فيديو بلا عناصر تحكم.
final class PlayerUIView: UIView {
init(player: AVPlayer) {
super.init(frame: .zero)
let layer = AVPlayerLayer(player: player)
layer.videoGravity = .resizeAspectFill
self.layer.addSublayer(layer)
}
required init?(coder: NSCoder) { fatalError() }
}صورة داخل صورة
لتفعيل صورة داخل صورة، استخدم AVPictureInPictureController مع طبقة المشغّل، وفعّل إمكانية الصوت في الخلفية.
let pip = AVPictureInPictureController(playerLayer: playerLayer)
pip?.startPictureInPicture()التنظيف
أوقف المشغّل وأزل المراقبين عند اختفاء العرض لتحرير الموارد وإيقاف الصوت في الخلفية الذي لم تقصده.
.onDisappear {
player.pause()
// remove notification observers here
}اختبار سريع: مشغّلات SwiftUI
اختبر فهمك لتضمين المشغّلات في SwiftUI.
مراجعة: تضمين المشغّلات في SwiftUI
يضمّن VideoPlayer من AVKit كائن AVPlayer مع عناصر تحكم قياسية؛ احتفظ بالمشغّل في @State لضمان بقاء مثيل ثابت، وتحكّم في التشغيل والإيقاف المؤقت من خلال onAppear/onDisappear. أضف التراكبات عبر الإغلاق اللاحق، وكرّر التشغيل عند وصول إشعار انتهاء التشغيل.
لتشغيل مخصّص بلا عناصر تحكم، غلّف AVPlayerLayer داخل UIViewRepresentable، ونظّف المراقبين عند الاختفاء.
الأسئلة الشائعة
هل درس «تضمين المشغلات في SwiftUI» مجاني؟
نعم — نص درس «تضمين المشغلات في SwiftUI» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «تضمين المشغلات في SwiftUI»؟
استخدم VideoPlayer وعروض المشغلات المخصصة. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «تضمين المشغلات في SwiftUI»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تشغيل الوسائط باستخدام AVPlayer
- تسجيل الصوت
- AVAsset والتركيب
- تضمين المشغلات في SwiftUI