ios选择图片功能,结果列表扩大

This commit is contained in:
CaiYanPeng 2021-09-07 15:26:43 +08:00
parent 510cd11049
commit fe65b83c89
12 changed files with 295 additions and 31 deletions

View File

@ -70,7 +70,10 @@ public static class XCodePostProcessBuild
PlistElementDict qxLoc = plist.root.CreateDict("NSLocationWhenInUseUsageDescription");
qxLoc.SetBoolean("NSLocationWhenInUseUsageDescription", true);
plist.root.SetString("NSCameraUsageDescription","cameraDesciption");
plist.root.SetString("NSContactsUsageDescription", "contactsDesciption");
plist.root.SetString("NSMicrophoneUsageDescription", "microphoneDesciption");
plist.root.SetString("NSPhotoLibraryUsageDescription", "photoLibraryDesciption");
File.WriteAllText(listPath, plist.WriteToString());
}

View File

@ -0,0 +1,5 @@
//import 引用头文件 相当于Using
#import<QuartzCore/CADisplayLink.h>
//声明一个IOSCameraController类 继承自UIViewController <>里面是是协议/代理的调用声明 可以理解为c#的接口
@interface IOSCameraController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
@end

View File

@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: a11b3afe071c6854388ea27186ccaf4f
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings:
AddToEmbeddedBinaries: false
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,173 @@
#import "IOSCameraController.h"
@implementation IOSCameraController
-(void)OpenTarget:(UIImagePickerControllerSourceType)type{
//UIImagePickerController
UIImagePickerController *picker;
picker= [[UIImagePickerController alloc]init];
//
picker.delegate = self;
// (NO)
picker.allowsEditing = YES;
//
// UIImagePickerControllerSourceTypePhotoLibrary, //
// UIImagePickerControllerSourceTypeCamera, //
// UIImagePickerControllerSourceTypeSavedPhotosAlbum //
picker.sourceType = type;
//iphoneipad 使iphone ipad ()
//ipad 使
//QQipad 使
//https://www.tlbyxzcx.com
if (picker.sourceType == UIImagePickerControllerSourceTypePhotoLibrary &&[[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
//
picker.modalPresentationStyle = UIModalPresentationPopover;
//
UIPopoverPresentationController *popover = picker.popoverPresentationController;
//
popover.delegate = self;
//
popover.sourceRect = CGRectMake(0, 0, 0, 0);
popover.sourceView = self.view;
//
popover.permittedArrowDirections = UIPopoverArrowDirectionAny;
//
[self presentViewController:picker animated:YES completion:nil];
} else {
//
[self presentViewController:picker animated:YES completion:^{}];
}
}
//Choose
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
//
[picker dismissViewControllerAnimated:YES completion:^{}];
//
UIImage *image = [info objectForKey:@"UIImagePickerControllerEditedImage"];
if (image == nil) {
image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
}
//ios
//
if (image.imageOrientation != UIImageOrientationUp) {
//
image = [self fixOrientation:image];
}
//
NSString *imagePath = [self GetSavePath:@"Temp.jpg"];
// unityApplication.persistentDataPath
[self SaveFileToDoc:image path:imagePath];
}
//
-(NSString*)GetSavePath:(NSString *)filename{
NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docPath = [pathArray objectAtIndex:0];
return [docPath stringByAppendingPathComponent:filename];
}
//
-(void)SaveFileToDoc:(UIImage *)image path:(NSString *)path{
NSData *data;
if (UIImagePNGRepresentation(image)==nil) {
data = UIImageJPEGRepresentation(image, 1);
}else{
data = UIImagePNGRepresentation(image);
}
[data writeToFile:path atomically:YES];
//unity
//UnitySendMessage unity 1. 2. 3.
UnitySendMessage("FeedbackModal(Clone)", "OnMobileImageSelect", [NSString stringWithFormat:@"true,%@",path ].UTF8String);
}
#pragma mark
//
- (UIImage *)fixOrientation:(UIImage *)aImage {
CGAffineTransform transform = CGAffineTransformIdentity;
switch (aImage.imageOrientation) {
case UIImageOrientationDown:
case UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
transform = CGAffineTransformRotate(transform, M_PI);
break;
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
transform = CGAffineTransformRotate(transform, M_PI_2);
break;
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, 0, aImage.size.height);
transform = CGAffineTransformRotate(transform, -M_PI_2);
break;
default:
break;
}
switch (aImage.imageOrientation) {
case UIImageOrientationUpMirrored:
case UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
transform = CGAffineTransformScale(transform, -1, 1);
break;
case UIImageOrientationLeftMirrored:
case UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.height, 0);
transform = CGAffineTransformScale(transform, -1, 1);
break;
default:
break;
}
// Now we draw the underlying CGImage into a new context, applying the transform
// calculated above.
CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
CGImageGetBitsPerComponent(aImage.CGImage), 0,
CGImageGetColorSpace(aImage.CGImage),
CGImageGetBitmapInfo(aImage.CGImage));
CGContextConcatCTM(ctx, transform);
switch (aImage.imageOrientation) {
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
// Grr...
CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage);
break;
default:
CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage);
break;
}
// And now we just create a new UIImage from the drawing context
CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
UIImage *img = [UIImage imageWithCGImage:cgimg];
CGContextRelease(ctx);
CGImageRelease(cgimg);
return img;
}
@end
//C++dllC
//使CC++C
//CdllCC++使
#if defined(__cplusplus)
extern "C" {
#endif
//unity使
void IOS_OpenCamera(){
IOSCameraController *app = [[IOSCameraController alloc]init];
UIViewController *vc = UnityGetGLViewController();
[vc.view addSubview:app.view];
[app OpenTarget:UIImagePickerControllerSourceTypeCamera];
}
void IOS_OpenAlbum(){
IOSCameraController *app = [[IOSCameraController alloc]init];
UIViewController *vc = UnityGetGLViewController();
[vc.view addSubview:app.view];
[app OpenTarget:UIImagePickerControllerSourceTypePhotoLibrary];
}
#if defined(__cplusplus)
}
#endif

View File

@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: abaf756c4b6577148bdfc4e32d4e7a8e
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings:
AddToEmbeddedBinaries: false
userData:
assetBundleName:
assetBundleVariant:

View File

@ -120,10 +120,10 @@ RectTransform:
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.5}
m_AnchorMax: {x: 1, y: 0.5}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 390}
m_SizeDelta: {x: 844, y: 390}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &465239219729653175
CanvasRenderer:

View File

@ -249,9 +249,9 @@ RectTransform:
m_Father: {fileID: 3070817481054122626}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 30, y: -5}
m_AnchorMin: {x: 0, y: 0.5}
m_AnchorMax: {x: 0, y: 0.5}
m_AnchoredPosition: {x: 30, y: 190}
m_SizeDelta: {x: 0, y: 52}
m_Pivot: {x: 0, y: 1}
--- !u!222 &3070817480521919872
@ -512,10 +512,10 @@ RectTransform:
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchorMin: {x: 0.5, y: 0}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 844, y: 390}
m_SizeDelta: {x: 844, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3070817481054122627
CanvasRenderer:
@ -1361,9 +1361,9 @@ RectTransform:
m_Father: {fileID: 5897250536070262098}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: -20, y: -140}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: -20, y: 245}
m_SizeDelta: {x: 90, y: 1}
m_Pivot: {x: 1, y: 1}
--- !u!222 &4134945106620816021
@ -1499,7 +1499,7 @@ RectTransform:
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 674, y: 385}
m_SizeDelta: {x: 674, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4915624194418938829
CanvasRenderer:
@ -1575,7 +1575,7 @@ RectTransform:
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 674, y: 385}
m_SizeDelta: {x: 674, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4915624194703378359
CanvasRenderer:
@ -2087,9 +2087,9 @@ RectTransform:
m_Father: {fileID: 5897250536070262098}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: -132, y: -151}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: -132, y: 234}
m_SizeDelta: {x: 134, y: 28}
m_Pivot: {x: 0, y: 1}
--- !u!222 &5897250536639853673
@ -2340,7 +2340,7 @@ MonoBehaviour:
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 0
m_ChildControlHeight: 0
m_ChildControlHeight: 1
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
--- !u!1 &5897250537694636682
@ -2376,9 +2376,9 @@ RectTransform:
m_Father: {fileID: 5897250536070262098}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: -23, y: -102}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: -23, y: 283}
m_SizeDelta: {x: 84, y: 28}
m_Pivot: {x: 1, y: 1}
--- !u!222 &5897250537694636678

View File

@ -11,7 +11,7 @@ using Assets.Scripts.Devices;
public static class App
{
public static string Host = "http://192.168.0.102:5082/";
public static string Host = "http://192.168.0.101:5184/";
public static string AppVersion = Application.version;
@ -85,7 +85,6 @@ public static class App
public readonly static bool isFullScreen = width/height>1.8;
static App()
{
Debug.Log(isFullScreen);
#if !UNITY_EDITOR
//Host = "http://pf.juze.pro/";
//UdpAddress = new IPEndPoint(IPAddress.Parse("47.97.84.8"), 21000);

View File

@ -6,16 +6,23 @@ using UnityEngine;
public class ImageSelectorController
{
private AndroidJavaObject mainActivityObject = null;
#if UNITY_IOS
[DllImport("__Internal")]
private static extern void IOS_OpenCamera();
[DllImport("__Internal")]
private static extern void IOS_OpenAlbum();
#endif
private static ImageSelectorController _instance;
public static ImageSelectorController Instance
{
get
{
#if !UNITY_EDITOR
if (_instance == null)
{
_instance = new ImageSelectorController();
}
#endif
return _instance;
}
}
@ -30,6 +37,10 @@ public class ImageSelectorController
}
public void Select()
{
#if UNITY_IOS
IOS_OpenAlbum();
#else
mainActivityObject.Call("Select");
#endif
}
}

View File

@ -47,13 +47,18 @@ public class MapListController : PFUIPanel
{
#if (UNITY_ANDROID || UNITY_IOS)
topContainer = transform.Find("Top");
var rectTransform = transform.GetComponent<RectTransform>();
var offsetMax = rectTransform.offsetMax;
rectTransform.offsetMax = new Vector2(0, offsetMax.y);
var offsetMin = rectTransform.offsetMin;
rectTransform.offsetMin = new Vector2(0, offsetMin.y);
//var rectTransform = transform.GetComponent<RectTransform>();
//var offsetMax = rectTransform.offsetMax;
//rectTransform.offsetMax = new Vector2(0, offsetMax.y);
//var offsetMin = rectTransform.offsetMin;
//rectTransform.offsetMin = new Vector2(0, offsetMin.y);
var widthDelta = (transform.parent.parent.GetComponent<RectTransform>().sizeDelta.x -
transform.GetComponent<RectTransform>().sizeDelta.x)/2;
Debug.Log(widthDelta);
//筛选按钮
var topRect = topContainer.GetComponent<RectTransform>();
topRect.localPosition = new Vector3(topRect.localPosition.x - widthDelta
, topRect.localPosition.y, topRect.localPosition.z);
if (!App.topRectStartX.HasValue)
{
App.topRectStartX = topRect.localPosition.x;

View File

@ -15,6 +15,9 @@ public class ResultListPanelController : PFUIPanel
{
UIManager.SwitchAccount();
});
var rect = transform.GetComponent<RectTransform>();
rect.offsetMax = new Vector2(rect.offsetMax.x, 0);
rect.offsetMin = new Vector2(rect.offsetMin.x, 0);
}
public override void Show()
{

View File

@ -38,7 +38,6 @@ GraphicsSettings:
- {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0}
- {fileID: 16001, guid: 0000000000000000f000000000000000, type: 0}
- {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0}
- {fileID: 16003, guid: 0000000000000000f000000000000000, type: 0}
m_PreloadedShaders: []
m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000,
type: 0}