2

私はおっと、Objective-cに不慣れです。携帯電話から写真を読み込むcollectionViewがあります。アセットがフル解像度で表示されるように、別のViewControllerにセグエしたいのですが、この投稿に従いました: Rob MayoffによるprepareForSegueでUIImageView.imageを設定し、これを思い付きました。これがメインVCのコードです。

 - (void)viewDidLoad
    {
        [super viewDidLoad];

        void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop)
        {
            if (result != NULL)
            {
                NSLog(@"See Asset: %@", result);
                [_gallery addObject:result];
            }

        };




        void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) =  ^(ALAssetsGroup *group, BOOL *stop)
        {
            if(group != nil)
            {
                [group enumerateAssetsUsingBlock: assetEnumerator];

            }

           [self.collectionView reloadData];
        };

        _gallery = [[NSMutableArray alloc]init];

        _library = [[ALAssetsLibrary alloc] init];

        [_library enumerateGroupsWithTypes: ALAssetsGroupAlbum
                               usingBlock: assetGroupEnumerator
                             failureBlock: ^(NSError *error)
         {
             NSLog(@"Failure");
         }];
    }





    -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
    {

        return 1;

    }


    -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
    {
        return _gallery.count;

    }


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

        ViewControllerCell *myCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"myCell" forIndexPath:indexPath];



        _asset = [_gallery objectAtIndex:indexPath.row];


        _photo =[UIImage imageWithCGImage:[_asset thumbnail]] ;

        myCell.myImage.image = _photo;

        return myCell;
    }



    -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
    {
        _asset = [_gallery objectAtIndex:indexPath.row];
        _photo = [UIImage imageWithCGImage:[_asset thumbnail]];
        ALAssetRepresentation *rep = [_asset defaultRepresentation];
        CGImageRef ref = [rep fullResolutionImage];
        _img = [UIImage imageWithCGImage: ref];


    }

     //the segue is set to modal
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {

        if ([segue.identifier isEqualToString:@"ShowPhoto"]) {


           PhotoZoomController *photoZoom = segue.destinationViewController;

            photoZoom.object = sender;


        }
    }

次に、完全な画像を表示するために、宛先VCのviewDidLoadメソッドでこれを行います。

- (void)viewDidLoad
{
    ViewController *vc = [[ViewController alloc] init];

    _image = vc.img;

     [super viewDidLoad];


    _largePhoto.image = _image;   / *largePhoto is the UIImageView @property declared        
                                    in destination VC.h */

}

空白のimageViewを取得しています。私は確かに何か間違ったことをしました、そして本当にあなたの助けが必要です。もうどうしたらいいのかわからないのでよろしくお願いします。

4

2 に答える 2

0

最大の問題はViewController *vc = [[ViewController alloc] init];、まったく新しいViewControllerオブジェクトを作成することです。新品なので、必要な画像が含まれている可能性はありません。

必要な戦略は、prepareForSegue:メソッドを使用して画像をに渡すことPhotoZoomControllerです。

(私にはどのようなものかはわかりませんphotoZoom.object。もしそうなら、ViewControllerそれを使って画像を取得することができます。)

于 2012-11-15T15:19:58.433 に答える
0

あなたは方法がどのように機能するかを誤解したと思いますprepareForSegue:。基本的に、プロパティの設定のように、ナビゲート先のviewControllerと対話する可能性を提供します。したがってPhotoZoomController、画像を渡すプロパティUIImageViewが必要です。次に、次のようなことを行うことができます。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"ShowPhoto"]) {
           PhotoZoomController *photoZoom = segue.destinationViewController;
            photoZoom.imageView = myCreatedImageView;
        }
    }

このように、モーダルビューが表示されたら、そのUIImageViewプロパティを適切に設定する必要があります。あなたのように、新しいViewControllerを作成する必要はありViewController *vcません。

于 2012-11-15T15:30:05.670 に答える