iPhoneのカメラロールのお気に入りボタンのようなものを作りたい
iPhoneのカメラロールのお気に入りボタン(ハート型のボタン)のようなものを作りたいと考えています。
撮った写真がコレクションビューに配置されていて、その一つをタップすると画面が遷移して画面いっぱいでみることができるカメラロールのようなものを作りました。
お気に入りボタンをBOOL値でそれぞれの画像ごとに認識したいのですが、BOOL値をそれぞれの画像ごとに保存する方法がわかりません。
MainViewControllerのセグエで画像の配列を取得してDetailViewControllerでその取得した画像の配列にBOOL値もいれたいのですが、一つのNSMutableArray配列に画像とBOOL値の二つを入れることは可能でしょうか
どなたか何かわかる方がいましたらよろしくお願いします。
MainViewController.m
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showDetailView"])
{
NSIndexPath *indexPath = [self.collectionView.indexPathsForSelectedItems objectAtIndex:0];
UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath];
UIImageView *selectedImage = (UIImageView *)[cell viewWithTag:1];
//画面を遷移
ShowViewController *showViewController = segue.destinationViewController;
showViewController.image2 = selectedImage.image;
showViewController.delegate = self;
//どこがタップされたかの指定
// CollectionHeaderViewを特定
UIView *view = sender;
while (view && ![view isKindOfClass:[CollectionHeaderView class]]){
view = view.superview;
}
CollectionHeaderView *headerView = (CollectionHeaderView *)view;
//_imageSelectionIndexPathに現在選択されたセクションを指定
_imageSelectionIndexPath = headerView.indexPath;
//お気に入りボタンの初期値設定
//ここで表示される画像ごとのBOOL値を取得する
}
}
DetailViewController.m
- (void)viewDidLoad
{
if (self.favoriteButton) {
NSLog(@"お気に入りボタンのBOOLがYES");
} else {
NSLog(@"お気に入りボタンのBOOLがNO");
}
}
-(void)tappedFavorite
{
//ここでBOOL値を保存
}
Lesson.h
#import <Foundation/Foundation.h>
#import "Record.h"
@interface Lesson : NSObject <NSCoding>
@property (nonatomic) NSString *name;
@property (nonatomic) NSString *teacher;
@property (nonatomic) NSString *room;
@property (nonatomic) NSMutableArray *records;
+ (NSArray *)fetchLessons;
+ (void)saveLessons:(NSArray *)lessons;
@end
Lesson.m
#import "Lesson.h"
@implementation Lesson
+ (NSArray *)fetchLessons
{
NSString *path = [self makeLibraryPath];
NSData *data = [[NSData alloc] initWithContentsOfFile:path];
NSArray *array =[NSKeyedUnarchiver unarchiveObjectWithData:data];
if (!array) {
array = [NSArray array];
}
return array;
}
+ (void)saveLessons:(NSArray *)lessons
{
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:lessons];
NSString *path = [self makeLibraryPath];
if ([data writeToFile:path atomically:YES]) {
NSLog(@"画像の保存が成功しました");
} else {
NSLog(@"画像の保存に失敗しました");
}
}
+ (NSString *)makeLibraryPath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *dir = [paths objectAtIndex:0];
return [dir stringByAppendingPathComponent:@"data.dat"];
}
- (instancetype)init
{
self = [super init];
if (self) {
self.records = [NSMutableArray array];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self){
self.name = [aDecoder decodeObjectForKey:@"name"];
self.teacher = [aDecoder decodeObjectForKey:@"teacher"];
self.room = [aDecoder decodeObjectForKey:@"room"];
self.records = [aDecoder decodeObjectForKey:@"records"];
//self.favButton = [aDecoder decodeObjectForKey:@"favorite"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.teacher forKey:@"teacher"];
[aCoder encodeObject:self.room forKey:@"room"];
[aCoder encodeObject:self.records forKey:@"records"];
}
@end
Record.h
#import <Foundation/Foundation.h>
@interface Record : NSObject <NSCoding>
@property (nonatomic) NSDate *date;
@property (nonatomic) NSMutableArray *images;
@end
Record.m
#import "Record.h"
@implementation Record
- (instancetype)init
{
self = [super init];
if (self) {
self.images = [NSMutableArray array];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self){
self.date = [aDecoder decodeObjectForKey:@"date"];
self.images = [aDecoder decodeObjectForKey:@"images"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.date forKey:@"date"];
[aCoder encodeObject:self.images forKey:@"images"];
}
@end