此处将为大家介绍关于iOS选取用户相册中的图片UIImagePickerControllerSwift的详细内容,并且为您解答有关ios选取照片的相关问题,此外,我们还将为您介绍关于cocos2d-x
此处将为大家介绍关于iOS 选取用户相册中的图片 UIImagePickerController Swift的详细内容,并且为您解答有关ios选取照片的相关问题,此外,我们还将为您介绍关于cocos2d-x横版项目调用 ios UIImagePickerController、iOS 18发布啦!iOS 18好吗?iOS 18值得更新吗?iOS 18beta版、iOS swift sonarQube 命令 ./run-sonar-swift.sh -v 抛出错误、ios – Swift 3发布后,Swift 2应用程序是否可以运行?的有用信息。
本文目录一览:- iOS 选取用户相册中的图片 UIImagePickerController Swift(ios选取照片)
- cocos2d-x横版项目调用 ios UIImagePickerController
- iOS 18发布啦!iOS 18好吗?iOS 18值得更新吗?iOS 18beta版
- iOS swift sonarQube 命令 ./run-sonar-swift.sh -v 抛出错误
- ios – Swift 3发布后,Swift 2应用程序是否可以运行?
iOS 选取用户相册中的图片 UIImagePickerController Swift(ios选取照片)
iOS 选取用户相册中的图片 UIImagePickerController
[GitHub] iOS Demo : https://github.com/KyleBing/iosDemo
该文中的例子可以从上面这个 github 项目中找到,包含许多其它常用UI
组件的使用
选取用户相册中图片,或者拍照的方式通过 UIImagePickerController
来实现
内容
从相册中选取一张图片,并按比例显示在当前 ViewController
的中间位置
步骤
VC
=ViewController
方便说明,所以简写
- 在当前
VC
中 实现UIImagePickerControllerDelegate
、UINavigationController
这两个协议 - 新建一个
picker: UIImagePickerController
和imageView: UIImageView
- 设置这个 picker 的
delegate
是 当前VC
- 设置
imageView
的内容展示属性:比例缩放 - 设置选取照片的触发方法,比如在
NavigationBar
中添加一个按钮 -
实现 UIImagePickerControllerDelegate 的两个方法
- 用户选中一张图片时:获取 info 中的信息并进行相关操作,最后使选择窗口消失
- 用户取消选择时,使选择窗口消失
效果
代码及注释
//
// ImagePickerVC.swift
// iosDemo
//
// Created by Kyle on 2020/3/16.
// Copyright © 2020 KyleBing. All rights reserved.
//
import UIKit
/// 0. 这个 ViewController 需要实现 UIImagePickerControllerDelegate 和 UINavigationControllerDelegate 两个协议
class ImagePickerVC: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
/// 1. 新建 UIImagePickerController 对象
var imagePicker: UIImagePickerController = UIImagePickerController()
lazy var imageView = UIImageView(frame: view.frame)
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Pick", style: .plain, target: self, action: #selector(pickAnImage))
/// 2. 设置 picker 的 delegate 和 相关设置
imagePicker.delegate = self
imagePicker.sourceType = .photoLibrary
/// 3. 设置 imageView 的属性
imageView.contentMode = .scaleAspectFit
view.addSubview(imageView)
}
@objc func pickAnImage(){
/// 4. 点击选图片时,展示这个 picker controller
present(imagePicker, animated: true) {
print("UIImagePickerController: presented")
}
}
// MARK: - Image picker delegate
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
/// 5. 用户选中一张图片时触发这个方法,返回关于选中图片的 info
/// 6. 获取这张图片中的 originImage 属性,就是图片本身
guard let selectedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage else {
fatalError("error: did not picked a photo")
}
/// 7. 根据需要做其它相关操作,这里选中图片以后关闭 picker controller 即可
picker.dismiss(animated: true) { [unowned self] in
// add a image view on self.view
self.imageView.image = selectedImage
}
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
/// 8. 用户点击取消时
picker.dismiss(animated: true) {
print("UIImagePickerController: dismissed")
}
}
}
info 内容
__C.UIImagePickerControllerInfoKey(_rawValue: UIImagePickerControllerReferenceURL): assets-library://asset/asset.JPG?id=557741A9-A05A-468E-AFAB-9B759CB66660&ext=JPG
__C.UIImagePickerControllerInfoKey(_rawValue: UIImagePickerControllerOriginalImage): <UIImage:0x283e360a0 anonymous {2048, 1536}>
__C.UIImagePickerControllerInfoKey(_rawValue: UIImagePickerControllerMediaType): public.image
__C.UIImagePickerControllerInfoKey(_rawValue: UIImagePickerControllerImageURL): file:///private/var/mobile/Containers/Data/Application/A5875FF6-3D3C-4147-BF5B-AD850397694D/tmp/CC744A41-B42F-490E-9B5F-5AF06CDD24C4.jpeg]
cocos2d-x横版项目调用 ios UIImagePickerController
cocos2d-x的一个横版项目需呀用到UIImagePickerController
ios直接报错,原因是不支持横版
最初自己写了ImagePickerViewController专门的ViewController来控制这块,通过addSubview竖屏没问题,但是在横屏有很多的问题
通过paush或者presentModalViewController切换之后,取得图片之后返回游戏,直接报错OpenGL错误
强制限制ImagePickerViewController的横竖屏都没有有效解决该问题,后来直接在RootViewController添加UIImagePickerController就好了
解决办法
1、Targets > General > Deployment Info
Device Orientation 选中 Portrait 与 Landscape Left Landscape Right
2、代码RootViewController.h
#import <UIKit/UIKit.h> @interface RootViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate> { } - (BOOL) prefeRSStatusBarHidden; @end
代码RootViewController.mm
#import "RootViewController.h" #import "cocos2d.h" #import "platform/ios/CCEAGLView-ios.h" #include "SimpleAudioEngine.h" using namespace CocosDenshion; @implementation RootViewController /* // The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. - (id)initWithNibName:(Nsstring *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { // Custom initialization } return self; } */ /* // Implement loadView to create a view hierarchy programmatically,without using a nib. - (void)loadView { } */ /* // Implement viewDidLoad to do additional setup after loading the view,typically from a nib. - (void)viewDidLoad { [super viewDidLoad]; } */ // Override to allow orientations other than the default portrait orientation. // This method is deprecated on ios6 - (BOOL)shouldAutorotatetoInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return UIInterfaceOrientationIsLandscape( interfaceOrientation ); } // For ios6,use supportedInterfaceOrientations & shouldAutorotate instead //- (NSUInteger) supportedInterfaceOrientations{ //#ifdef __IPHONE_6_0 // return UIInterfaceOrientationMaskAllButUpsideDown; //#endif //} - (NSUInteger) supportedInterfaceOrientations { //Because your app is only landscape,your view controller for the view in your // popover needs to support only landscape return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight; } - (BOOL) shouldAutorotate { return YES; } //- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation //{ // return UIInterfaceOrientationPortrait; //} - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; auto glview = cocos2d::Director::getInstance()->getopenGLView(); if (glview) { CCEAGLView *eaglview = (CCEAGLView*) glview->getEAGLView(); if (eaglview) { CGSize s = CGSizeMake([eaglview getWidth],[eaglview getHeight]); cocos2d::Application::getInstance()->applicationScreenSizeChanged((int) s.width,(int) s.height); } } } //fix not hide status on ios7 - (BOOL)prefeRSStatusBarHidden { return YES; } - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Release any cached data,images,etc that aren't in use. } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // e.g. self.myOutlet = nil; } - (void)dealloc { [super dealloc]; } #pragma 拍照选择照片协议方法 -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediawithInfo:(NSDictionary *)info { [UIApplication sharedApplication].statusBarHidden = NO; Nsstring *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; if ([mediaType isEqualToString:@"public.image"]){ //先把图片转成NSData // UIImage* image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; UIImage* imageSrc = [info objectForKey:@"UIImagePickerControllerEditedImage"]; float scale = 140.0f / imageSrc.size.width; UIImage* image = [self scaleImage:imageSrc toScale:scale]; NSData *data; if (UIImagePNGRepresentation(image) == nil) { data = UIImageJPEGRepresentation(image,1.0); } else { data = UIImagePNGRepresentation(image); } //图片保存的路径 //这里将图片放在沙盒的documents文件夹中 Nsstring * DocumentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; //文件管理器 NSFileManager *fileManager = [NSFileManager defaultManager]; //生成唯一字符串 Nsstring* uuid = [[NSUUID UUID] UUIDString]; //文件名 Nsstring* fileName = [Nsstring stringWithFormat:@"/%@.png",uuid]; //把刚刚图片转换的data对象拷贝至沙盒中 并保存为XXXXXXXX-XXXX-XXXX....XXXX.png [fileManager createDirectoryAtPath:DocumentsPath withIntermediateDirectories:YES attributes:nil error:nil]; [fileManager createFileAtPath:[DocumentsPath stringByAppendingString:fileName] contents:data attributes:nil]; //得到选择后沙盒中图片的完整路径 Nsstring* filePath = [[Nsstring alloc]initWithFormat:@"%@%@",DocumentsPath,fileName]; //关闭相册界面 [picker dismissModalViewControllerAnimated:YES]; std::string strFilePath = [filePath UTF8String]; cocos2d::Director::getInstance()->getEventdispatcher()->dispatchCustomEvent("ImagePickerEvent",&strFilePath); } } #pragma mark- 缩放图片 -(UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize { UIGraphicsBeginImageContext(CGSizeMake(image.size.width*scaleSize,image.size.height*scaleSize)); [image drawInRect:CGRectMake(0,image.size.width * scaleSize,image.size.height *scaleSize)]; UIImage *scaledImage = UIGraphicsGetimageFromCurrentimageContext(); UIGraphicsEndImageContext(); return scaledImage; } - (void)viewWilldisappear:(BOOL)animated { [super viewWilldisappear:animated]; cocos2d::Director::getInstance()->pause(); cocos2d::Director::getInstance()->stopAnimation(); SimpleAudioEngine::getInstance()->pauseBackgroundMusic(); } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; cocos2d::Director::getInstance()->resume(); cocos2d::Director::getInstance()->startAnimation(); SimpleAudioEngine::getInstance()->resumeBackgroundMusic(); } @end
3、AppController.mm
-(void)openPhoto { // ImagePickerViewController* imagePickerViewController = [[ImagePickerViewController alloc] initWithNibName:nil bundle:nil]; // // [_viewController.view addSubview:imagePickerViewController.view]; // // [imagePickerViewController localPhoto]; <p><span>UIImagePickerController</span><span> *picker = [[</span><span>UIImagePickerController</span><span> </span><span>alloc</span><span>] </span><span>init</span><span>];</span></p><p><span> </span><span>if</span><span> ([</span><span>UIImagePickerController</span><span> </span><span>isSourceTypeAvailable</span><span>:</span></p><p><span> </span><span>UIImagePickerControllerSourceTypePhotoLibrary</span><span>]) {</span></p><p><span> picker.</span><span>sourceType</span><span> = </span><span>UIImagePickerControllerSourceTypePhotoLibrary</span><span>;</span></p><p><span> picker.</span><span>delegate</span><span> = </span><span>_viewController</span><span>;</span></p><p><span> [picker </span><span>setAllowsEditing</span><span>:</span><span>YES</span><span>];</span></p><p><span> </span><span>//</span><span>针对</span><span>Ipad</span><span>单独处理,否则会出错</span><span> #define isPad (UI_USER_INTERFACE_IdioM() == UIUserInterfaceIdiomPad)</span></p><p><span> </span><span>if</span><span> (</span><span>isPad</span><span>)</span></p><p><span> {</span></p><p><span> </span><span>//popoverController</span><span>属性需要定义全局属性</span><span> @property(nonatomic,strong) UIPopoverController *popoverController;</span></p><p><span> </span><span>UIPopoverController</span><span> *popover = [[</span><span>UIPopoverController</span><span> </span><span>alloc</span><span>] </span><span>initWithContentViewController</span><span>:picker];</span></p><p><span> </span><span>self</span><span>.</span><span>popoverController</span><span> = popover;</span></p><p><span> </span><span>//popoverController.delegate = self;</span></p><p><span> </span></p><p><span> [</span><span>self</span><span>.</span><span>popoverController</span><span> </span><span>presentPopoverFromrect</span><span>:</span><span>CGRectMake</span><span>(</span><span>0</span><span>,</span><span>0</span><span>,</span><span>300</span><span>,</span><span>300</span><span>) </span><span>inView</span><span>:</span><span>_viewController</span><span>.</span><span>view</span><span> </span><span>permittedArrowDirections</span><span>:</span><span>UIPopoverArrowDirectionAny</span><span> </span><span>animated</span><span>:</span><span>YES</span><span>];</span></p><p><span> </span></p><p><span> </span><span>//[self presentModalViewController:m_imagePicker animated:YES];</span></p><p><span> [popover </span><span>release</span><span>];</span></p><p><span> [picker </span><span>release</span><span>];</span></p><p><span> }</span></p><p><span> </span><span>else</span><span>{</span></p><p><span> [</span><span>_viewController</span><span> </span><span>presentModalViewController</span><span>:picker </span><span>animated</span><span>:</span><span>YES</span><span>];</span></p><p><span> }</span></p><p><span> </span></p><p><span> }</span><span>else</span><span> {</span></p><p><span> </span><span>UIAlertView</span><span> *alert = [[</span><span>UIAlertView</span><span> </span><span>alloc</span><span>]</span><span>initWithTitle</span><span>:</span><span>nil</span><span> </span><span>message</span><span>:</span><span>@"Error accessing photo library!"</span></p><p><span> </span><span>delegate</span><span>:</span><span>nil</span><span> </span><span>cancelButtonTitle</span><span>:</span><span>@"Close"</span><span> </span><span>otherButtonTitles</span><span>:</span><span>nil</span><span>];</span></p><p><span> [alert </span><span>show</span><span>];</span></p><p><span> [alert </span><span>release</span><span>]; </span></p><p><span> }</span></p> } -(void)openCamera { // ImagePickerViewController* imagePickerViewController = [[ImagePickerViewController alloc] initWithNibName:nil bundle:nil]; // // [_viewController.view addSubview:imagePickerViewController.view]; // // [imagePickerViewController takePhoto]; UIImagePickerController * picker = [[UIImagePickerController alloc] init]; picker.delegate = _viewController; picker.allowsEditing = YES; if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { picker.sourceType = UIImagePickerControllerSourceTypeCamera; }else{ NSLog(@"模拟器无法打开相机"); } [_viewController presentModalViewController:picker animated:YES]; }
iOS 18发布啦!iOS 18好吗?iOS 18值得更新吗?iOS 18beta版
ios 18 横空出世,带来了一系列激动人心的新功能。您是否好奇 ios 18 的亮点,它是否值得升级?php小编西瓜带来 ios 18 的全面解读,详细介绍了它的新特性、改进和已解决的错误。如果您正在考虑升级到 ios 18,请继续阅读以了解它的优缺点,并决定它是否适合您的设备和需求。
iOS 18 beta版终于发布啦!iOS 18此次更新是否与预期一样呢? iOS 18更新了哪些内容呢?是否真的值得果粉用户升级呢?
iOS 18的更新内容涵盖了多个方面,旨在提升用户体验和个性化设置。以下是iOS 18的更新内容概览:
定制主屏幕:
用户可以自由
移动应用程序,按照个人喜好调整主屏幕布局。 图标支持深色模式,用户可以为图标着色,打造独特的外观。
应用程序可以随意放置,深色模式APP有更深度的适配,且有色系可选,整体可调节成一种色系。
优化控制中心:
控制中心进行了重新设计,新增了多款快捷组件,用户可以根据需要选择和
排列。 控件页面支持多页布局,用户可滑动访问控制中心的其它页面。
控制中心界面设计已扩展为多页布局,允许用户将不常访问的功能移动到次级页面。
隐私与安全:
iOS 18支持给APP上锁,支持面容识别,同时也能隐藏APP,以加强用户的隐私权限。
用户可以专门控制第三方App可以访问哪些通讯录,进一步保障数据安全。
信息应用更新:
发送的字体样式和表情有更多自定义选项。
支持稍后发送功能。
在无网情况下,iPhone 14及后续机型支持卫星直发。
其他内置应用更新:
邮箱应用进行了更新,分类和摘要功能提高了效率。
钱包应用支持两个手机一碰即可相互转账。
地图应用带来了新的地形图。
相册应用引入了智能功能,查找照片和照片分类更加精准。
附上iOS 18升级方法:
※1、刷机前请做好重要数据资料的备份,或勾选“保留用户资料刷机”,防止重要资料丢失;
※2、请确保移动设备未开启激活锁,或者知道 ID 锁帐号、密码,否则刷机后可能会无法激活设备;
※3、设备升级到 iOS 18后,将无法再降级到“苹果已关闭验证”的固件版本,即使之前使用备份了 SHSH 也不能降级。
打开最新版电脑端,用数据线把手机设备连接到电脑。点击上方“智能刷机”进入到“一键刷机”界面,连接成功会自动匹配iOS 18固件,选择“保留用户资料刷机”立即刷机。
以上就是iOS 18发布啦!iOS 18好吗?iOS 18值得更新吗?iOS 18beta版的详细内容,更多请关注php中文网其它相关文章!
iOS swift sonarQube 命令 ./run-sonar-swift.sh -v 抛出错误
如何解决iOS swift sonarQube 命令 ./run-sonar-swift.sh -v 抛出错误
嗨,当我为 iOS SonarQube 运行以下命令时,出现以下错误
命令:./run-sonar-swift.sh -v
错误:
Executed 2 tests,with 0 failures (0 unexpected) in 0.333 (0.335) seconds
..
Executed 2 tests,with 0 failures (0 unexpected) in 24.284 (24.289) seconds
\\nComputing coverage report\\n
Command line exclusion flags for slather is:
slather coverage --binary-basename SonarDemoApp --input-format profdata --cobertura-xml --output-directory sonar-reports --workspace SonarDemoApp.xcworkspace --scheme SonarDemoApp SonarDemoApp.xcodeproj
+ slather coverage --binary-basename SonarDemoApp --input-format profdata --cobertura-xml --output-directory sonar-reports --workspace SonarDemoApp.xcworkspace --scheme SonarDemoApp SonarDemoApp.xcodeproj
Slathering...
<internal:/usr/local/Cellar/ruby/3.0.1/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'': cannot load such file -- rexml/document (LoadError)
from <internal:/usr/local/Cellar/ruby/3.0.1/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require''
from /usr/local/Cellar/gem-slather/2.7.0/gems/xcodeproj-1.19.0/lib/xcodeproj/scheme.rb:1:in `<top (required)>''
from <internal:/usr/local/Cellar/ruby/3.0.1/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require''
from <internal:/usr/local/Cellar/ruby/3.0.1/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require''
from /usr/local/Cellar/gem-slather/2.7.0/gems/slather-2.7.0/lib/slather/project.rb:481:in `find_binary_files''
from /usr/local/Cellar/gem-slather/2.7.0/gems/slather-2.7.0/lib/slather/project.rb:451:in `configure_binary_file''
from /usr/local/Cellar/gem-slather/2.7.0/gems/slather-2.7.0/lib/slather/project.rb:331:in `configure''
from /usr/local/Cellar/gem-slather/2.7.0/gems/slather-2.7.0/lib/slather/command/coverage_command.rb:59:in `execute''
from /usr/local/Cellar/gem-slather/2.7.0/gems/clamp-1.3.2/lib/clamp/command.rb:66:in `run''
from /usr/local/Cellar/gem-slather/2.7.0/gems/clamp-1.3.2/lib/clamp/subcommand/execution.rb:18:in `execute''
from /usr/local/Cellar/gem-slather/2.7.0/gems/clamp-1.3.2/lib/clamp/command.rb:66:in `run''
from /usr/local/Cellar/gem-slather/2.7.0/gems/clamp-1.3.2/lib/clamp/command.rb:140:in `run''
from /usr/local/Cellar/gem-slather/2.7.0/gems/slather-2.7.0/bin/slather:17:in `<top (required)>''
from /usr/local/bin/slather:6:in `load''
from /usr/local/bin/slather:6:in `<main>''
+ returnValue=1
+ set +x
ERROR - Command ''slather coverage --binary-basename SonarDemoApp --input-format profdata --cobertura-xml --output-directory sonar-reports --workspace SonarDemoApp.xcworkspace --scheme SonarDemoApp SonarDemoApp.xcodeproj'' Failed with error code: 1
我已经安装了 xcode 命令行工具、slather 等等。但不知道为什么会出现这个错误
另外,之前我收到命令未找到 slather,然后我尝试安装“gem install slather”但它不起作用。
所以我按照以下命令重新安装 ruby 并尝试安装 slather,然后全部安装完毕。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install ruby
echo ''export PATH="/usr/local/opt/ruby/bin:$PATH"'' >> ~/.bash_profile
source ~/.bash_profile
正在寻找有关上述错误的帮助。
ios – Swift 3发布后,Swift 2应用程序是否可以运行?
解决方法
>当Swift 3推出时,您的应用程序是否会在新操作系统上执行?
>推出时,您的应用会在新操作系统上运行吗?
关于第一个问题,是的,你的应用程序将执行,即使它是针对Swift 2编译的.Swift应用程序在其捆绑包中嵌入了Swift运行时库,因此您在这方面是安全的.您会注意到Swift捆绑包总是比Objective-C对应物大4-5 MB,这正是原因所在.
关于第二个问题,与任何新的操作系统版本一样,无法保证您的应用程序能够像以前版本的操作系统那样工作.虽然根据我的经验,Apple在过去的几个OS版本中做了相当不错的工作,尽管你的里程可能会有所不同.
今天关于iOS 选取用户相册中的图片 UIImagePickerController Swift和ios选取照片的介绍到此结束,谢谢您的阅读,有关cocos2d-x横版项目调用 ios UIImagePickerController、iOS 18发布啦!iOS 18好吗?iOS 18值得更新吗?iOS 18beta版、iOS swift sonarQube 命令 ./run-sonar-swift.sh -v 抛出错误、ios – Swift 3发布后,Swift 2应用程序是否可以运行?等更多相关知识的信息可以在本站进行查询。
本文标签: