Поскольку AssetsLibrary
устарел, используйте вместо этого Photos
framework (iOS 8 и более поздние версии).
// Deprecated!
import AssetsLibrary
// Swift 3.0
let assetsLibrary = ALAssetsLibrary()
assetsLibrary.addAssetsGroupAlbum(withName: "NewAlbum", resultBlock: { assetsGroup in
print(assetsGroup == nil ? "Already created" : "Success")
}, failureBlock: { error in
print(error)
})
Вы можете использовать общий объект PHPhotoLibrary
для создания новых фотографий, но вы не можете дать им конкретные имена, потому что вы будете работать с активами, которыми необходимо управлять с помощью Photos.app . У каждого актива есть определенные свойства.
Чтобы создать собственный альбом, используйте PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle:
) .
g6] Краткое описание:
// Swift 3.0
func createPhotoLibraryAlbum(name: String) {
var albumPlaceholder: PHObjectPlaceholder?
PHPhotoLibrary.shared().performChanges({
// Request creating an album with parameter name
let createAlbumRequest = PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle: name)
// Get a placeholder for the new album
albumPlaceholder = createAlbumRequest.placeholderForCreatedAssetCollection
}, completionHandler: { success, error in
if success {
guard let placeholder = albumPlaceholder else {
fatalError("Album placeholder is nil")
}
let fetchResult = PHAssetCollection.fetchAssetCollections(withLocalIdentifiers: [placeholder.localIdentifier], options: nil)
guard let album: PHAssetCollection = fetchResult.firstObject else {
// FetchResult has no PHAssetCollection
return
}
// Saved successfully!
print(album.assetCollectionType)
}
else if let e = error {
// Save album failed with error
}
else {
// Save album failed with no error
}
})
}
Не забудьте библиотеку import Photos
.
Чтобы создать новый фотоактивный ресурс на этом альбоме, используйте PHAssetCollectionChangeRequest.creationRequestForAssetCollection(withTitle:
) .
// Swift 3.0
func createPhotoOnAlbum(photo: UIImage, album: PHAssetCollection) {
PHPhotoLibrary.shared().performChanges({
// Request creating an asset from the image
let createAssetRequest = PHAssetChangeRequest.creationRequestForAsset(from: photo)
// Request editing the album
guard let albumChangeRequest = PHAssetCollectionChangeRequest(for: album) else {
// Album change request has failed
return
}
// Get a placeholder for the new asset and add it to the album editing request
guard let photoPlaceholder = createAssetRequest.placeholderForCreatedAsset else {
// Photo Placeholder is nil
return
}
albumChangeRequest.addAssets([photoPlaceholder] as NSArray)
}, completionHandler: { success, error in
if success {
// Saved successfully!
}
else if let e = error {
// Save photo failed with error
}
else {
// Save photo failed with no error
}
})
}
UPDATE:
Нам нужно запросить доступ, чтобы иметь возможность использовать библиотеку Photos:
PHPhotoLibrary.requestAuthorization { status in
switch status {
...
}
Начиная с iOS 10 и выше нам также нужно добавить запись для доступа в целевой файл .plist для «Конфиденциальность - описание использования библиотеки фотографий»:
NSPhotoLibraryUsageDescription
Access to photos is needed to provide app features
Я полагаю, что EndianBitConverter в библиотеке MiscUtil от Jon Skeet (nuget link) может сделать то, что вы хотите.
Вы также можете поменять биты местами, используя операции сдвига битов:
uint swapEndianness(uint x)
{
return ((x & 0x000000ff) << 24) + // First byte
((x & 0x0000ff00) << 8) + // Second byte
((x & 0x00ff0000) >> 8) + // Third byte
((x & 0xff000000) >> 24); // Fourth byte
}
Использование:
atomSize = BitConverter.ToUInt32(buffer, 0);
atomSize = swapEndianness(atomSize);
System.Net.IPAddress.NetworkToHostOrder(atomSize);
перевернет ваши байты.
Я рекомендую использовать Mono's DataConvert
который похож на BitConverter
на стероидах. Он позволяет напрямую читать байтовые массивы с большой эндианой и значительно улучшает BitConverter
.
Прямая ссылка на источник находится здесь.