1. 程式人生 > >自定義相簿選中圖片

自定義相簿選中圖片

#import <UIKit/UIKit.h>

#import<AssetsLibrary/AssetsLibrary.h>

#import <AVFoundation/AVFoundation.h>

#import "PhotoEditViewController.h"

#define SettingCamera 10102

@interface OnePhotoController :UIViewController

@property (nonatomic,weak) id<PhotoEditDelegate> delegate;

@property

(nonatomic,assign)BOOL isScale;

@end

#import "UIImage+FixOrientation.h"

#import "OnePhotoController.h"

#import "PhotoSampleItem.h"

#import "ETPhotoUtil.h"

@interface OnePhotoController ()<UICollectionViewDataSource,UICollectionViewDelegate,UIAlertViewDelegate>

@property (weak,nonatomic

) IBOutletUINavigationItem *naviTitleItem;

@property (nonatomic,strong) UICollectionView *collectionView;

@property (nonatomic,strong) NSMutableArray *allGroups;

@property (nonatomic,strong) ALAssetsLibrary*library ;

@property (nonatomic,assign) BOOL firstIn;

@end

@implementation OnePhotoController

- (instancetype)init{

self = [superinit];

if (self) {

_firstIn =YES;

    }

returnself;

}

- (void)viewDidLoad {

    [superviewDidLoad];

//設定collectionView

self.allGroups = [[ETPhotoUtilsharedInstance] allPhotos];

self.naviTitleItem.title = [[ETPhotoUtilsharedInstance]cameraRoll];

    [selfsetCollectionViewFlowLayout];

    [self.collectionViewreloadData];

if ([self.allGroupscount]==0) {

        [selfisAuthorizationStatus];

    }

}

- (void)viewWillAppear:(BOOL)animated{

    [superviewWillAppear:animated];

//    if (self.allGroups.count>0&&_firstIn) {

//        NSIndexPath *indexPath= [NSIndexPath indexPathForRow:(self.allGroups.count -1) inSection:0];

//        [self.collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionBottom animated:NO];

//        _firstIn = NO;

//    }

}

- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

}

#pragma mark - Main Method

- (NSMutableArray *)allGroups{

if (_allGroups ==nil) {

_allGroups = [NSMutableArrayarray];

    }

return_allGroups;

}

- (void)setCollectionViewFlowLayout{

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayoutalloc] init];

    layout.itemSize =CGSizeMake((kScreenWidth -30)*.25,(kScreenWidth -30)*.25);

    layout.minimumLineSpacing =6;

    layout.minimumInteritemSpacing =6;

    layout.sectionInset =UIEdgeInsetsMake(10,6, 10,6);

self.collectionView = [[UICollectionViewalloc] initWithFrame:CGRectMake(0,64, kScreenWidth, kScreenHeight-64)collectionViewLayout:layout];

self.collectionView.backgroundColor = [UIColorclearColor];

    [self.collectionViewregisterClass:[PhotoSampleItemclass] forCellWithReuseIdentifier:@"collectionView"];

self.collectionView.dataSource = self;

self.collectionView.delegate =self;

    [self.viewaddSubview:self.collectionView];

}

//取消按鈕

- (IBAction)cancelAction:(UIButton *)sender {

    [selfdismissViewControllerAnimated:YEScompletion:nil];

}

#pragma mark - UICollectionViewDelegate

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{

returnself.allGroups.count;

}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

PhotoSampleItem *cell = [collectionViewdequeueReusableCellWithReuseIdentifier:@"collectionView"forIndexPath:indexPath];

dispatch_async(dispatch_get_global_queue(0,0), ^{

ALAsset *alaset = [self.allGroupsobjectSafetyAtIndex:indexPath.row];

//獲取到媒體的型別

NSString *type = [alasetvalueForProperty:ALAssetPropertyType];

//獲取到相片、視訊的縮圖

UIImage *image =nil;

if ([selfcurrentDeviceIsIpad]){

//獲取到相片、視訊的縮圖

CGImageRef cgImage = [[alasetdefaultRepresentation] fullScreenImage];

            image = [UIImageimageWithCGImage:cgImage];

        }else{

//獲取到相片、視訊的縮圖

CGImageRef cgImage = [alasetaspectRatioThumbnail];

            image = [UIImageimageWithCGImage:cgImage];

        }

//媒體型別是相片

if ([typeisEqualToString:ALAssetTypePhoto])

        {

dispatch_async(dispatch_get_main_queue(), ^{

                cell.imageView.image=image;

            });

        }

    });

return cell;

}

- (BOOL)currentDeviceIsIpad{

NSString* strDevice = [[UIDevicecurrentDevice].modelsubstringToIndex:4];

if ([strDeviceisEqualToString:@"iPad"]) {

returnYES;

    } else {

returnNO;

    }

}

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{

ALAsset *alasset =nil;

    alasset = [self.allGroupsobjectSafetyAtIndex:indexPath.row];

NSArray *item= [UIImagegetHeadMetaFromAlasset:alasset];

PhotoEditViewController *editVC = [PhotoEditViewControllernew];

    editVC.delegate =self.delegate;

    editVC.upImgs = item;

    editVC.isScale =self.isScale;

    [self.navigationControllerpushViewController:editVCanimated:YES];

}

#pragma  mark - **********ALAssetsGroup DataSource*************

- (void)isAuthorizationStatus{

// 獲取當前應用對照片的訪問授權狀態

ALAuthorizationStatus authorizationStatus = [ALAssetsLibraryauthorizationStatus];

// 如果沒有獲取訪問授權,或者訪問授權狀態已經被明確禁止,則顯示提示語,引導使用者開啟授權

if (authorizationStatus ==ALAuthorizationStatusRestricted || authorizationStatus ==ALAuthorizationStatusDenied) {

// 展示提示語

NSDictionary *mainInfoDictionary = [[NSBundlemainBundle] infoDictionary];

NSString *appName = [mainInfoDictionaryobjectForKey:@"CFBundleName"];

UIAlertView * alertView = [[UIAlertViewalloc] initWithTitle:nilmessage:[NSStringstringWithFormat:@"請在裝置的\"設定-隱私-照片\"選項中,允許%@訪問你的手機相簿", appName] delegate:selfcancelButtonTitle:@"設定"otherButtonTitles:@"稍後再說",nil];

        alertView.tag =SettingCamera;

        [alertView show];

    }

}

#pragma mark - **********AlertViewDelegate***********

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

if(buttonIndex==0){

NSURL *setUrl =nil;

if (alertView.tag ==SettingCamera) {

            setUrl = [NSURLURLWithString:@"prefs:root=Privacy"];

        }

        [[UIApplicationsharedApplication] openURL:setUrl];

    }

if (buttonIndex==1) {

if (alertView.tag ==SettingCamera) {

            [selfdismissViewControllerAnimated:YEScompletion:nil];

        }

    }

}

@end

相關推薦

定義相簿選中圖片

#import <UIKit/UIKit.h> #import<AssetsLibrary/AssetsLibrary.h> #import <AVFoundation/AVFoundation.h> #import "Phot

vue導航欄定義設定帶圖片選中狀態重新整理不消失)

轉載自https://blog.csdn.net/wang1006008051/article/details/78686451?utm_source=blogxgwz6 Vue導航欄         用Vue寫手機端的專

iOS-對圖片操作---新增到定義相簿

轉自:https://www.jianshu.com/p/7113c2c15e2c   圖片操作---新增到自定義相簿 實際上,自定義相簿中的圖片並不是實際的圖片,而是對系統【相機膠捲】這個相簿中的圖片進行一個引用,所以將圖片儲存到自定義相簿的第一步就是先儲存到系統的【相機膠捲

iOS-儲存圖片到(定義)相簿步驟

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff } 儲存到相簿步驟: 1.儲存圖片到【相機膠捲】 2.擁有一個【自定義相簿】 3.將剛

android 定義比例裁剪圖片(拍照 相簿)方式 定義比例

先說下我這個有啥好處 主要是能夠自定義設定裁剪圖片的比例.比如 :今天產品 給你說裁剪 成16:9 的圖片. 你做好了 OK 明天 產品又和你說 裁剪成10:7 的圖片 ,你是不是要吐血, 我這裡只要設定一行程式碼就可以改變裁剪的比例. OK 還是老規

iOS uitableview定義相簿(實現拍照並儲存在指定目錄以相簿的形式展示圖片

原理: 圖片的展示是通過uitableview實現。照片的展示以及選擇(uitableviewce’l’l)是通過倆個uibutton的疊加完成。通過設定每個uibutton的tag,並在viewcontroller中實現cell的delegate來實現對ui

Android 定義控件——圖片剪裁

ets nis anti none span out pro int() mat 如圖: 思路:在一個自定義View上繪制一張圖片(參照前面提到的另一篇文章),在該自定義View上繪制一個自定義的FloatDrawable,也就是圖中的浮層。繪制圖片和FloatDra

Enjoy! 多達400多萬的動態搞笑,愛情,友情。。。。表情下載 表情表情定義表情表情圖片下載 定義QQ表情使用方法完全圖解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

定義水波擴散圖片

公司產品需要一個按鈕有一個水波紋擴散的效果,就簡單的做了一個。先上圖 然後就是原始碼了,程式碼很簡單 我就不解釋了,就是想留著做個紀念 package com.example.administrator.myapplication.view; import android.an

iOS開發-定義後臺顯示圖片 iOS7-Background Fetch的應用

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

pytorch—ImageFolder/定義類 讀取圖片資料—Transform資料轉換

文章目錄 一、torchvision 影象資料讀取 [0, 1] 二、torchvision 的 Transform 三、讀取影象資料類 3.1 class torchvision.d

Android定義view實現圖片選色器

https://www.jb51.net/article/141336.htm 這篇文章主要為大家詳細介紹了Android自定義view實現圖片選色器,具有一定的參考價值,感興趣的小夥伴們可以參考一下 簡介 本文介紹該自定義view的使用及實現的方法,主要實現以下幾個功能: - 選取

Android 定義相機 Camera 圖片方向問題

相機預覽方向問題 對於相機的預覽方向我們可以通過如下API進行設定 camera.setDisplayOrientation(0);但是,該API影響的是相機的預覽方向,對於照片的儲存方向並沒有什麼影響,最終照片儲存的方向還是由Camera的影象Sensor決定的。 照片儲

LayoutParams和onMeasure的效率(定義16:9圖片

-- SetLayoutParams和onMeasure的差別 setLayoutParams:設定view的寬度和高度。 onMeasure: 設定view的可見寬度和高度。 1) LayoutParams RelativeLayout.LayoutParams par

定義相簿時候的複選框☑️問題。

我的相簿裡是一個recycleView所以操作起來也很方便,我這裡直接就貼上條目佈局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.

iOS分段選擇器、旅行App、標度尺、對對碰小遊戲、定義相簿等原始碼

iOS精選原始碼 企業級開源專案,模仿藝龍旅行App 標籤選擇器--LeeTagView CSSegmentedControl常用的分段選擇器,簡單易用! 仿微信左滑刪除 IOS左滑返回 輸入框 iOS 基於PhotoKit框架的自定義相簿 JHDraw - 畫線,

scrapy定義pipeline下載圖片/文件

自定義圖片/文件下載pipeline,自定義一個自己需要的路徑來儲存下載的圖片/文件 自定義pipeline可以基於scrapy自帶的ImagesPipeline的基礎上完成。 可以重寫ImagesPipeline中的三個法:get_media_requests(),file_path(),

雲展網教程 | 如何定義電子書背景圖片

一、會員可以不用模板中的背景圖片,通過上傳您的圖片自定義背景圖片哦【付費會員功能】。 1、通過頭像進入個人中心,選擇我的資料夾 2、點選編輯雜誌進入編輯頁面。 3、在設定欄目選擇背景圖片。如圖 在左側編輯雜誌設定欄目下的背景圖片,點選背景圖片檔案選擇檔案,上傳您的檔案。 4、上

Android中定義滑動選中控制元件WheelView

WheelView a great functional custom WheelView with demo in dialog and bottomDialog,android 滾動選擇控制元件,滾動選擇器 ========= How to

android 定義ImageView實現圖片手勢滑動,多點觸控放大縮小效果

首先呢,還是一貫作風,我們先來看看眾多應用中的示例:(這種效果是很常見的,可以說應用的必須品.)                             搜狐客戶端                                    百度新聞客戶端