Как реализовать различные режимы или стили камеры в приложении камеры iOS с помощью контроллера просмотра страниц?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как реализовать различные режимы или стили камеры в приложении камеры iOS с помощью контроллера просмотра страниц?

Сообщение Anonymous »


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

это мой код контроллера просмотра страниц для видов с камеры, таких как фотографические стили. ` импортировать UIKit импортировать AVFoundation

класс filterViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource { var cameraViewControllers: [UIViewController] = []

переопределить функцию viewDidLoad() { супер.viewDidLoad() self.dataSource = сам self.delegate = сам // Добавьте контроллеры представления камеры пусть camera1ViewController = filtercameraViewController() пусть camera2ViewController = filtercameraViewController() пусть camera3ViewController = filtercameraViewController() cameraViewControllers = [camera1ViewController, camera2ViewController, camera3ViewController] если let firstView = cameraViewControllers.first { setViewControllers([firstView], направление: .forward, анимация: true, завершение: ноль) } } // В фильтреViewController функция setPageSize() { // Устанавливаем размер страницы, соответствующий размеру filtercameraViewController пусть pageWidth = UIScreen.main.bounds.width let pageHeight = UIScreen.main.bounds.height/5.0 // Отрегулируйте по мере необходимости self.view.frame = CGRect(x: 0, y: 0, ширина: pageWidth, высота: pageHeight) } func pageViewController (_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { Guard let currentIndex = cameraViewControllers.firstIndex(of: (viewController as? filtercameraViewController)!) else { return nil } пусть предыдущийИндекс = ТекущийИндекс - 1 если предыдущийИндекс < 0 { вернуть ноль } вернуть cameraViewControllers[previousIndex] } func pageViewController (_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { Guard let currentIndex = cameraViewControllers.firstIndex(of: (viewController as? filtercameraViewController))!) else { return nil } пусть следующийИндекс = ТекущийИндекс + 1 если nextIndex >= cameraViewControllers.count { вернуть ноль } вернуть cameraViewControllers[nextIndex] } переопределить init (стиль переходаStyle: UIPageViewController.TransitionStyle, NavigationOrientation: UIPageViewController.NavigationOrientation, параметры: [UIPageViewController.OptionsKey: Any]? = ноль) { super.init(transitionStyle: .scroll, NavigationOrientation: .horizontal, параметры: ноль) } требуется инициализация?(кодер: NSCoder) { FatalError("init(coder:) не реализован") } }`
Код инициализирует вид камеры, настраивает камеру с помощью AVCaptureSession и добавляет в сеанс входные данные AVCaptureDevice и AVCapturePhotoOutput. Он также устанавливает слой предварительного просмотра для просмотра с камеры. `импортировать UIKit импортировать AVFoundation класс filtercameraViewController: cameraViewController { // вар CameraView: UIView! переопределить функцию viewDidLoad() { супер.viewDidLoad() cameraView = UIView () cameraView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(cameraView) //CameraView.backgroundColor = .black пусть X: CGFloat = 40,0 пусть Y: CGFloat = 40,0 // пусть X: CGFloat = 60.0 пусть x: CGFloat = 140,0 NSLayoutConstraint.activate([ cameraView.leadingAnchor.constraint(equalTo: view.leadingAnchor, константа: Y), cameraView.trailingAnchor.constraint(equalTo: view.trailingAnchor, константа: -Y), cameraView.topAnchor.constraint(equalTo: view.topAnchor, константа: X), cameraView.bottomAnchor.constraint(equalTo: view.bottomAnchor, константа: -x) ]) captureSession = AVCaptureSession() // captureSession.sessionPreset = currentAspectRatio если пусть устройство = AVCaptureDevice.default(for:.video) { делать { let input = попробуйте AVCaptureDeviceInput (устройство: устройство) if ((captureSession.canAddInput(input)) ) { captureSession.addInput(вход) } StillImageOutput = AVCapturePhotoOutput() // Инициализируем его как AVCapturePhotoOutput if ((captureSession.canAddOutput(stillImageOutput!))) { // Разворачиваем необязательный captureSession.addOutput(stillImageOutput!) } viewLayer = AVCaptureVideoPreviewLayer(session: captureSession!) cameraView?.layer.addSublayer(previewLayer) DispatchQueue.global(qos:.userInitiated).async { self.captureSession.startRunning() } } ловить { print("Ошибка настройки камеры: \(ошибка)") } } } } ` `` Код инициализирует вид камеры, настраивает камеру с помощью AVCaptureSession и добавляет в сеанс входные данные AVCaptureDevice и AVCapturePhotoOutput. Он также устанавливает слой предварительного просмотра для просмотра с камеры. Это основной класс моего кода, здесь есть кнопка для открытия страниц. после открытия страниц он может применить фильтры, которые я добавил в небольшой фрагмент кода. Думаю, для вас этого достаточно: импортировать UIKit импортировать AVFoundation импортировать фотографии импортировать CoreMotion класс cameraViewController: UIViewController, AVCapturePhotoCaptureDelegate, UIGestureRecouncerDelegate { вар cameraView: UIView! вар captureButton: UIButton! вар cameraSwitchButton: UIButton! вар flashModeButton: UIButton! вар captureSession: AVCaptureSession! вар StillImageOutput: AVCapturePhotoOutput! вар просмотр слоя: AVCaptureVideoPreviewLayer! вар currentZoomFactor: CGFloat = 1,0 вар maxZoomFactor: CGFloat = 5.0 вар ZoomStep: CGFloat = 1.0 var currentFlashMode: AVCaptureDevice.FlashMode = .auto // устанавливаем автоматический режим вспышки вар isFlashOn: Bool = ложь // varexpositionPoint = CGPoint(x: 0,5, y: 0,5) // var focusPoint = CGPoint(x: 0.5, y: 0.5) вар boxView: UIView! варexpositionSlider: UISlider! вар currentExposureBias: Float = 0,0 var currentFocusLevel: Float = 0.0 // вычисление вар motionManager: CMMotionManager! вар yawAngle: Double = 0,0 вар сегментированныйконтролл: UISegmentedControl! // элемент управления сегментом для выбора соотношения сторон var currentAspectRatio: AVCaptureSession.Preset = .hd1920x1080 // устанавливаем соотношение сторон по умолчанию в сеансе захвата вар timerButton: UIButton! вар timerDuration: TimeInterval = 0 вар timerLabel: UILabel! вар таймер: Таймер? вар styleButton: UIButton! вар-устройство: AVCaptureDevice! вар LastManualExposureValue: Float = 0,0 индекс вар: Int = 0 // вар pageViewController: UIPageViewController! вар isStyleViewActive = ложь var cameraViewControllers: [cameraViewController] = [] переопределить функцию viewDidLoad() { супер.viewDidLoad() настройкаКамераВью() настройкаКамера() НастройкаКнопки() настройкаBoxView() настройкаExposureSlider() настройкаЖесты() настройкаMotionManager() // настройкаКамеры() } //он использовался для скрытия строки состояния на дисплее, например: статус батареи, сигнал переопределить var предпочитаетStatusBarHidden: Bool{ вернуть истину } переопределить var supportInterfaceOrientations: UIInterfaceOrientationMask { вернуть .портрет } переопределить func viewDidAppear(_animated: Bool) { super.viewDidAppear(анимированный) PreviewLayer?.connection?.videoOrientation = currentVideoOrientation() PreviewLayer?.frame = cameraView.bounds // предварительный просмотрLayer.videoGravity = .resizeAspect } переопределить func viewWillTransition(to size: CGSize, с координатором: UIViewControllerTransitionCoordinator) { } функция setupCameraView() { камераView = UIView() cameraView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(cameraView) NSLayoutConstraint.activate([ cameraView.leadingAnchor.constraint(equalTo: view.leadingAnchor), cameraView.trailingAnchor.constraint(equalTo: view.trailingAnchor), cameraView.topAnchor.constraint(equalTo: view.topAnchor), cameraView.bottomAnchor.constraint(equalTo: view.bottomAnchor) ]) } функция setupCamera() { captureSession = AVCaptureSession() captureSession.sessionPreset = currentAspectRatio если пусть устройство = AVCaptureDevice.default(for:.video) { делать { let input = попробуйте AVCaptureDeviceInput (устройство: устройство) if ((captureSession.canAddInput(input)) ) { captureSession.addInput(вход) } StillImageOutput = AVCapturePhotoOutput() // Инициализируем его как AVCapturePhotoOutput if ((captureSession.canAddOutput(stillImageOutput!))) { // Разворачиваем необязательный captureSession.addOutput(stillImageOutput!) } viewLayer = AVCaptureVideoPreviewLayer(session: captureSession!) cameraView?.layer.addSublayer(previewLayer) DispatchQueue.global(qos:.userInitiated).async { self.captureSession.startRunning() } } ловить { print("Ошибка настройки камеры: \(ошибка)") } } } ` `` `` Я создал приложение камеры iOS с видом основной камеры и хочу добавить поддержку различных режимов или стилей камеры, аналогичных стилям фотографии в iPhone 13. Каждый режим должен иметь свой набор настроек камеры и элементов пользовательского интерфейса. Как лучше всего реализовать эту функцию в моем приложении для iOS? Можете ли вы предоставить какие-либо рекомендации или примеры кода о том, как создавать различные режимы камеры и переключаться между ними? Мне нужен совет по общей архитектуре и тому, как эффективно управлять настройками камеры и переходами пользовательского интерфейса между режимами. Будем очень признательны за любые советы, фрагменты кода или ссылки на соответствующую документацию. Спасибо!
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»