SORU
1 EKİM 2010, Cuma


URL ekran görüntüsü iPhone ALAsset alınan

Cihazın Fotoğraf Galerisi dosyalara erişmek için ALAsset bir Çerçeve kullanıyorum.

Şimdiye kadar küçük ve ekran erişmek mümkün duyuyorum.
Bir resim görünümünde gerçek resmi göstermek istiyorum ama bunu yapmak için nasıl anlamaya kuramıyorum.

URL alanını kullanarak ALAsset nesne çalıştım ama başarısız oldu.

Herkes bu işi nasıl bilir?

İşte küçük resim erişimi ve bir tablo hücresine yerleştirin başardı bazı kod:

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {


  static NSString *CellIdentifier = @"Cell";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
  }
  //here 'asset' represents the ALAsset object


  asset = [assets objectAtIndex:indexPath.row];
       //i am accessing the thumbnail here
  [cell.imageView setImage:[UIImage imageWithCGImage:[asset thumbnail]]];
  [cell.textLabel setText:[NSString stringWithFormat:@"Photo %d", indexPath.row 1]];

  return cell;
}

CEVAP
2 EKİM 2010, CUMARTESİ


API biraz oyunun kurallarını değiştirdi ve müzik kütüphanesine doğrudan erişim dosya sistemi artık anlamıyorum. Bunun yerine varlık kitaplığı URL böyle bir şey olsun.

assets-library://asset/asset.JPG?id=1000000003&ext=JPG

URL üzerinden ALAsset nesneye erişmek için ALAssetLibrary nesne kullanın.

ALAssetLibrary için doktorları öyle bir başlık bu (veya kaynak) at

typedef void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *asset);
typedef void (^ALAssetsLibraryAccessFailureBlock)(NSError *error);

kesinlikle gerekli değil ama işler çok tutar.
ve kaynak.

-(void)findLargeImage
{
    NSString *mediaurl = [self.node valueForKey:kVMMediaURL];

    //
    ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
    {
        ALAssetRepresentation *rep = [myasset defaultRepresentation];
        CGImageRef iref = [rep fullResolutionImage];
        if (iref) {
            largeimage = [UIImage imageWithCGImage:iref];
            [largeimage retain];
        }
    };

    //
    ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
    {
        NSLog(@"booya, cant get image - %@",[myerror localizedDescription]);
    };

    if(mediaurl && [mediaurl length] && ![[mediaurl pathExtension] isEqualToString:AUDIO_EXTENSION])
    {
        [largeimage release];
        NSURL *asseturl = [NSURL URLWithString:mediaurl];
        ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease];
        [assetslibrary assetForURL:asseturl 
                       resultBlock:resultblock
                      failureBlock:failureblock];
    }
}

Dikkat Bu bir kaç şey iOS4 benim taşıma başlamadan önce benim için yeni olan blokları kullanan vardır ama bakmak istersiniz diye

http://www.mikeash.com/pyblog/friday-qa-2008-12-26.html

ve

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Blocks/Articles/00_Introduction.html

Onlar kafanı kır ama eğer bildirim seçiciler veya geri olarak düşünürsen biraz yardımcı olur.

Ayrıca

  • findLargeImage döner resultblock alışkanlık olarak çalıştır henüz bir geri arama. Largeİmage alışkanlık ol henüz geçerli.
  • largeImage olması gerekir örnek için kapsamlı değil değişken yöntem.

Bu yöntemi kullanarak bunu yapmak için inşa ama bir şey kullanmak daha uygun bulabilirsiniz kullanıyorum.

[node.view findLargeImage];
UIImage *thumb = node.view.largeImage;
if (thumb) { blah blah }

Almaya çalışırken öğrendim işte bu çalışma yine de.

iOS 5 güncelleme

Sonuç bloğu ne zaman harekete biraz görüntü üzerinde doğrudan kullanılabilir findLargeImage arama sonra tevekkül kalamadım yani iOS5 & belki de tek çekirdekli cihazlar daha yavaş gibi görünüyor. Bir temsilci için çağrı için değiştirdim.

@protocol HiresImageDelegate <NSObject>
@optional
-(void)hiresImageAvailable:(UIImage *)aimage;
@end

ve ulaşım IS comme

//
    ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
    {
        ALAssetRepresentation *rep = [myasset defaultRepresentation];
        CGImageRef iref = [rep fullResolutionImage];
        if (iref) {
            UIImage *largeimage = [UIImage imageWithCGImage:iref];
            [delegate hiresImageAvailable:large];
        }
    };

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Moto Journal

    Moto Journal

    28 Mayıs 2007
  • RomanAtwood

    RomanAtwood

    18 Kasım 2009
  • sghaff1

    sghaff1

    23 Mart 2009