首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变更TintColor of UIImagePickerController

变更TintColor of UIImagePickerController
EN

Stack Overflow用户
提问于 2018-06-13 11:05:42
回答 3查看 2.2K关注 0票数 4

我通过调用:在我的应用程序中设置了一个全局tintColor:

代码语言:javascript
复制
UIView.appearance().tintColor = myColor

但是,同样的颜色适用于UIImagePickerController,并且只有一些UI元素被着色:例如,sun图标有一个自定义tintColor,而焦点帧有默认的tintColor。

如何不将全局外观配置应用到UIImagePickerController

我提议的解决方案没有完全解决这个问题,因为inputAccessoryView仍然有自己的tintColor:

代码语言:javascript
复制
window?.tintColor = myColor

更新:

我在启动时配置了应用程序范围的tintcolor:

代码语言:javascript
复制
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    configureWindowAndInitialViewController()
    UIView.appearance().tintColor = .cyan // Setting a global tintColor
    return true
  }

然后,我展示了一个UIImagePickerController

代码语言:javascript
复制
  func presentPhotoPicker(sourceType: UIImagePickerController.SourceType) {
    if let mediaTypes = UIImagePickerController.availableMediaTypes(for: sourceType)?
      .filter({$0 == kUTTypeImage as String}),
      !mediaTypes.isEmpty {
      let picker = UIImagePickerController()
      picker.delegate = self
      picker.mediaTypes = mediaTypes
      picker.sourceType = sourceType
      picker.allowsEditing = true
      controller?.present(picker, animated: true, completion: nil)
    }
  }

输入附件视图:

要添加一个输入附件视图,首先应该创建一个textField。然后,只需将工具栏附加到Textfield即可。

代码语言:javascript
复制
let spacer = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: sefl.view, action: #selector(UIView.endEditing))
items.append(contentsOf: [spacer, doneButton])

toolbar.setItems(items, animated: false)
textField.inputAccessoryView = toolbar

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-20 13:51:38

更改window?.tintColor后,inputAccessoryView.tintColor不会更改,因为inputAccessoryView不是当前窗口的子视图(它们没有相同的视图层次结构),因此window.tintColor不会影响inputAccessoryView

为了解决问题,我建议每次出现新的NotificationCenter时都使用window.tintColor来观察和更改UIWindow。您可以将代码放入AppDelegate

代码语言:javascript
复制
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
  // Override point for customization after application launch.
  NotificationCenter.default.addObserver(self, selector: #selector(self.windowDidBecomeVisible), name: .UIWindowDidBecomeVisible, object: nil)
  return true
}

@objc func windowDidBecomeVisible(notification: NSNotification) {
  // Each time an `UIWindow` becomes visible, change its |tintColor|
  let visibleWindow = notification.object as! UIWindow
  visibleWindow.tintColor = .red
}

如果只想为tintColor更改UIImagePickerController,则需要更改显示在UIImagePickerController上的每个视图的tintColor

  1. 定义一个扩展来更改所有子视图的tintColor。 扩展UIView { func changeTintColor(颜色: UIColor) -> ->{->{ view.tintColor =->view.changeTintColor(颜色:颜色);}
  2. 使用UINavigationControllerDelegate获取显示在UIImagePickerView上的UIViewController。更改此控制器内视图的tintColor func navigationController(_ navigationController: UINavigationController,willShow viewController: UIViewController,动画: Bool) {viewController.view.changeTintColor(颜色:.red) }
  3. 别忘了把UIImagePickerControllerdelegate设为self
票数 4
EN

Stack Overflow用户

发布于 2018-06-13 11:41:52

通过在窗口上设置全局tintColor而不是UIAppearance代理来修正:

代码语言:javascript
复制
window?.tintColor = myColor
票数 2
EN

Stack Overflow用户

发布于 2018-06-24 12:32:39

我相信这就是你想要的,试着改变一下你的喜好:

代码语言:javascript
复制
let myImagePicker = UIImagePickerController()
myImagePicker.navigationBar.translucent = false
myImagePicker.navigationBar.barTintColor = .blueColor() // Background color
myImagePicker.navigationBar.tintColor = .whiteColor() // Cancel button ~ any UITabBarButton items
myImagePicker.navigationBar.titleTextAttributes = [
        NSForegroundColorAttributeName : UIColor.whiteColor()
] // Title color

我只找到了这些:

自定义相机控件

代码语言:javascript
复制
var showsCameraControls: Bool

指示图像选择器是否显示默认照相机控件。

代码语言:javascript
复制
var cameraOverlayView: UIView?

在默认图像选择器接口顶部显示的视图。

代码语言:javascript
复制
var cameraViewTransform: CGAffineTransform

应用于摄像机预览图像的转换。捕捉静止图像或电影

代码语言:javascript
复制
func takePicture()

使用相机捕捉静止图像。

代码语言:javascript
复制
func startVideoCapture()

使用UIImagePickerControllerCameraDevice属性指定的摄像机启动视频捕获。

代码语言:javascript
复制
func stopVideoCapture()

停止视频捕捉。

将相机配置为使用

代码语言:javascript
复制
class func isCameraDeviceAvailable(UIImagePickerControllerCameraDevice)

返回一个布尔值,该值指示给定摄像机是否可用。

代码语言:javascript
复制
var cameraDevice: UIImagePickerControllerCameraDevice

图像选择器控制器使用的照相机。

代码语言:javascript
复制
enum UIImagePickerControllerCameraDevice

用于拍摄图像或电影的照相机。配置相机捕获模式

代码语言:javascript
复制
class func availableCaptureModes(for: UIImagePickerControllerCameraDevice)

返回一个NSNumber对象数组,该数组指示给定相机设备支持的捕获模式。

代码语言:javascript
复制
var cameraCaptureMode: UIImagePickerControllerCameraCaptureMode

摄像机使用的捕捉模式。

代码语言:javascript
复制
enum UIImagePickerControllerCameraCaptureMode

相机要捕捉的媒体类别。

配置闪存行为

代码语言:javascript
复制
class func isFlashAvailable(for: UIImagePickerControllerCameraDevice)

指示给定的摄像机是否具有闪光灯照明能力。

代码语言:javascript
复制
var cameraFlashMode: UIImagePickerControllerCameraFlashMode

活动相机使用的闪光灯模式。

代码语言:javascript
复制
enum UIImagePickerControllerCameraFlashMode

与活动相机一起使用的闪光灯模式。

配置导出预置

代码语言:javascript
复制
var imageExportPreset: UIImagePickerControllerImageURLExportPreset

预置用于准备图像输出到您的应用程序。

代码语言:javascript
复制
enum UIImagePickerControllerImageURLExportPreset

指示如何将图像导出到客户端应用程序的常量。

代码语言:javascript
复制
var videoExportPreset: String

预设使用时,准备视频出口到您的应用程序。

我已经在文档中进行了挖掘,并没有找到一种改变焦点视图的方法。也许苹果不让你这么做。也许cocoapods上有一个自定义的PickerView框架,或者有一个定制的相机框架。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50835655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档