- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的应用中,我希望用户能够拍照、展示照片,并且通过点击照片可以添加一个文本字段,以便他们可以在图像之上书写。这与在 Snapchat 中向图片添加文本的功能完全相同。
据我所知,在拍摄图像并能够对其进行编辑后呈现图像的唯一方法是设置:
imagePicker.showsCameraControls = false
制作自定义叠加层:
@IBAction func takePhoto(sender: UIButton) {
imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .Camera
imagePicker.showsCameraControls = false
imagePicker.allowsEditing = true
let overlayView = UIView(frame: CGRectMake(0, self.view.frame.width, self.view.frame.width, self.view.frame.height-self.view.frame.width))
overlayView.backgroundColor = UIColor.blackColor()
overlayView.alpha = 0.5
println(overlayView)
let snapButton = UIView(frame: CGRectMake(150, 160, 80, 80))
snapButton.layer.cornerRadius = 40
snapButton.userInteractionEnabled = true
snapButton.backgroundColor = UIColor.purpleColor()
overlayView.addSubview(snapButton)
overlayView.bringSubviewToFront(snapButton)
let recognizer = UITapGestureRecognizer(target: self, action:Selector("handleSnapTap:"))
recognizer.delegate = self
snapButton.addGestureRecognizer(recognizer)
let cancelButton = UIView(frame: CGRectMake(40, 40, 44, 44))
cancelButton.layer.cornerRadius = 22
cancelButton.userInteractionEnabled = true
cancelButton.backgroundColor = UIColor.redColor()
overlayView.addSubview(cancelButton)
overlayView.bringSubviewToFront(cancelButton)
let cancelRecognizer = UITapGestureRecognizer(target: self, action:Selector("handleCancelTap:"))
cancelRecognizer.delegate = self
cancelButton.addGestureRecognizer(cancelRecognizer)
let changeCameraButton = UIView(frame: CGRectMake(165, 40, 44, 44))
changeCameraButton.layer.cornerRadius = 22
changeCameraButton.userInteractionEnabled = true
changeCameraButton.backgroundColor = UIColor.blueColor()
overlayView.addSubview(changeCameraButton)
overlayView.bringSubviewToFront(changeCameraButton)
let changeCameraRecognizer = UITapGestureRecognizer(target: self, action:Selector("handleChangeCameraTap:"))
changeCameraRecognizer.delegate = self
changeCameraButton.addGestureRecognizer(changeCameraRecognizer)
let flashButton = UIView(frame: CGRectMake(300, 40, 44, 44))
flashButton.layer.cornerRadius = 22
flashButton.userInteractionEnabled = true
flashButton.backgroundColor = UIColor.yellowColor()
overlayView.addSubview(flashButton)
overlayView.bringSubviewToFront(flashButton)
let flashRecognizer = UITapGestureRecognizer(target: self, action:Selector("handleFlashTap:"))
flashRecognizer.delegate = self
flashButton.addGestureRecognizer(flashRecognizer)
imagePicker.cameraOverlayView = overlayView
presentViewController(imagePicker, animated: true, completion: nil)
}
func handleSnapTap(recognizer: UITapGestureRecognizer) {
println("Take picture")
imagePicker.takePicture()
self.performSegueWithIdentifier("cameraToImageViewSegue", sender: self)
}
func handleCancelTap(recognizer: UITapGestureRecognizer) {
println("Cancel")
self.imagePicker.dismissViewControllerAnimated(true, completion: nil)
}
func handleChangeCameraTap(recognizer: UITapGestureRecognizer) {
if (hasChangedCamera == nil){
imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.Front
hasChangedCamera = true
return
}
if (hasChangedCamera == true){
imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.Rear
hasChangedCamera = false
return
}
if (hasChangedCamera! == false){
imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.Front
hasChangedCamera = true
return
}
}
func handleFlashTap(recognizer: UITapGestureRecognizer) {
if (hasTurnedOnFlash == nil){
imagePicker.cameraFlashMode = UIImagePickerControllerCameraFlashMode.On
hasTurnedOnFlash = true
return
}
if (hasTurnedOnFlash == true){
imagePicker.cameraFlashMode = UIImagePickerControllerCameraFlashMode.Off
hasTurnedOnFlash = false
return
}
if (hasTurnedOnFlash == false){
imagePicker.cameraFlashMode = UIImagePickerControllerCameraFlashMode.On
hasTurnedOnFlash = true
return
}
}
最后展示一个新的 View Controller ,其中将选取的图像放置在 UIView 中,并从那里进行编辑。我的问题是如何直接从 UIImagePickerController 转到新的 View Controller 。我尝试了以下方法:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
self.imagePicker.dismissViewControllerAnimated(false, completion: nil)
let vc = ModifyCameraImageViewController() //change this to your class name
self.presentViewController(vc, animated: false, completion: nil)
}
首先,这只会导致黑屏,但我相信有一个足够简单的方法来解决这个问题。我的主要问题是,在下一个 View Controller 出现之前,显示 UIImagePickerController 的 View Controller 会短暂出现在屏幕上。这显然不好看。我还尝试删除 dismissViewController 函数,以及将 presentViewController 函数放在 dismissView Controller 函数之上。这两种尝试都给了我错误信息:
Warning: Attempt to present <xxx.ModifyCameraImageViewController: 0x145e3eb70> on <xxx.ViewController: 0x145d20a60> whose view is not in the window hierarchy!
尝试将 performSegueWithIdentifier 与连接底层 View 和下一个 View Controller 的 segue 一起使用会给出相同的错误警告。
我发现了以下类似的问题,但我对 Objective C 完全无能,所以我很难理解它:Push a viewController from the UIImagePickerController camera view
那么,关于如何直接从 UIImagePickerController 呈现 View Controller ,任何人都可以提供帮助吗?
另外,请记住,我这样做是为了能够在新选择的图像上创建一个文本叠加层(就像在 Snapchat 中一样),所以如果有人对此有更优雅的解决方案,请随时发布它!
谢谢!
最佳答案
好的,找到了解决我的问题的简单方法。当按下 takePicture 按钮时,不是从底层 View Controller 呈现 imagePickerController,而是直接从那里转到另一个 View Controller ,而是使用 takePicture 按钮转到另一个 View Controller ,并从第二个 View Controller 的 viewDidLoad 呈现 imagePickerController。当 imagePickerController 被关闭时,第二个 View Controller 将被呈现。然而,这需要底层 View Controller 看起来与相机控件相似,并且需要一些动画来使它看起来自然。
关于ios - Swift:从相机/UIImagePickerController 直接转到 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31374076/
我有一个 UIImagePickerController 和一个 cameraOverlayView,但是当用户拍照时,cameraOverlay View 会保留在“预览/使用照片/重拍照片 Vie
我试过将 Info.plist 'View controller-based status bar appearance' 设置为 NO,我试过调用 [[UIApplication sharedApp
我正在尝试快速使用 UIImagePickerController 但不起作用... 我的 View Controller : class ViewController: UIViewControll
我的 UIImagePickerController 有问题,allowEditing = YES。 我无法从底部裁剪图像,但在移动裁剪矩形时,顶部还有一个额外的空白空间。 也在方法中。 -(void
为什么当 UIImagePickerController 处于视频模式时,AVFoundation 显示的缩放级别与 UIImagePickerController 相同?如何使 AVFoundati
我正在开发一个应用程序,我必须使用图像选择器 Controller 从手机库导入图像。问题是我必须首先关闭选择器 Controller ,然后在选择器 Controller 关闭后呈现另一个 Cont
我的以下代码在 swift 4 上运行良好,但在升级到 swift 4.2 后出现此错误,我浪费了 3 个小时搜索问题所在但失败了。如果有人能指导我如何解决这个问题,请多多指教。 func image
所以我正在尝试为 iOS 7 更新一个应用程序,但我遇到了自定义叠加层的问题。叠加层是我用来构图的图像(实时和使用全分辨率版本在相机胶卷中构图最终结果)。问题是,现在在 iOS 7 下,覆盖层虽然在底
我正在使用 UIImagePickerController 捕获图像然后存储它。但是,当我尝试重新缩放它时,我从该图像中获得的方向值不正确。当我拿起手机拍照时,它给了我左边的方向。有没有人遇到过这个问
我注意到 UIImagePicker 为相机胶卷返回的 NSDictionary 似乎不再返回 UIImagePickerControllerOriginalImage 对象。相反,我得到了一个 UI
我有一个简单的标准图像选择器,它工作正常,但当我使用编辑器功能时,图像会移动到方形裁剪框上方。当我选择图像或调整图像大小然后接受它时,裁剪后的图像在裁剪框上方有大约 20 个像素的图像,底部有大约 4
我的应用程序允许用户从设备的相机胶卷中选择图像。我想验证所选图像的格式是 PNG 或 JPG 图像。 是否可以在 - (void)imagePickerController:(UIImagePicke
是否可以保存视频并将其添加到自定义 ALAsset,以 mp4 格式从 UIImagePicker 捕获?或者我必须将它保存在 .mov 中并通过 AVAssetExportSession 进行压缩?
似乎内置的 UIImagePickerController 无法接受除设备相机卷以外的来源。 我想在我自己的应用程序中获得选择和放大图片的功能。另外我想允许用户选择图片并将其保存到他们的相机胶卷中(以
我想在呈现 UIImagePickerController 拍照时隐藏显示快门打开的动画。我检查了this question对于包含已接受的内容的相同内容,但我无法在我的 Controller 中复制
我想 UIImagePickerController 会允许您使用相机或从 View 中的库中进行选择?看来我必须选择一个或另一个 cia 的 sourceType?有没有办法在选择库 View 中添
我试图在 UIActionSheet 中单击按钮后显示 UIImagePickerController。代码很简单。但是,对 [[UIImagePickerController alloc] init
我搜索了一些在我的应用程序中使用 UIImagePickerController 的方法,我发现唯一有效的方法如下: 在应用程序显示的第一个 View 上,输入: self.picker = [[UI
UIImagePickerController 很容易使用,但是当我以前没有发现它时,我突然发现它很令人恼火。发生的情况是,有时 imagePickerController:didFinishPick
我有以下代码: SecondViewController *secondView = [[SecondViewController alloc] initWithNibName:@"SecondVie
我是一名优秀的程序员,十分优秀!