2013-07-19 3 views
8

Я хотел бы сделать Facebook-приложение для iOS, которое делает снимок с экрана в режиме реального времени, когда пользователь нажимает на него.Как сделать изображение расширяемым до полного экрана при касании?

Update:

Я использую UICollectionView, чтобы отобразить изображение в ячейке, так кажется, что я должен с помощью collectionView:didSelectItemAtIndexPath: метод? , а изображениеView находится в ячейке, так что я могу полностью перейти на полный экран?

Прикрепленный пару изображений ниже:

enter image description here

enter image description here

ответ

5

использования UITapGestureRecognizer, и не забудьте установить imageView.userInteractionEnabled = YES;, потому что по умолчанию изображения, не имеющие UserInteraction.

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; 
[singleTap setNumberOfTapsRequired:1]; 

[imageView addGestureRecognizer:singleTap]; 


-(void)handleSingleTap:(id)sender { 
// push you view here 
//code for full screen image 
} 
+0

апология размытого описание. Я использую UICollectionView для отображения изображения в ячейке, поэтому, похоже, мне нужно использовать collectionView: didSelectItemAtIndexPath: method? , а изображениеView находится в ячейке, так что я могу полностью перейти на полный экран? –

+0

@Seraph J. Lin: да, как только вы ответите на вопрос TomSwift. – Balu

0

Что я понял, что у вас есть изображение в UIWebView Это то, что я есть в данный момент, установите UIWebViews делегата для себя тогда добавьте это:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { 
    if (navigationType == UIWebViewNavigationTypeLinkClicked) { 
     NSURL *URL = [request URL];   
     ImageViewer *imageView = [[[ImageViewer alloc] initWithNibName:@"ImageViewer" bundle:nil] autorelease]; 
     imageView.imageURL = URL; 
     [self presentModalViewController:imageView animated:YES]; 
     return NO; 
    } else { 
     return YES; 
    } 
} 

Просто сделайте образ а ссылку в html, как обычно. Если у вас есть другие ссылки, которые вы не хотите загружать в модель, вы можете модифицировать код, чтобы определить, будет ли ссылка нажата на изображение, иначе просто верните YES;

У меня небольшая проблема с моей WebView, который я разместил здесь (только упаковываю вы получите некоторую проблему !!) Code.

Надеются, что это помогает!

+0

извинение за размытое описание. Я использую UICollectionView для отображения изображения в ячейке, а изображениеView находится в ячейке, так что я могу полностью перейти на полный экран? –

+0

Ok no Probs .. добавив еще один ответ :) –

13

Вот довольно простое решение. Предполагается, что ваша ячейка коллекции имеет UIImageView как единственный подпункт содержимого UICollectionViewCell contentView.

#import <objc/runtime.h> // for objc_setAssociatedObject/objc_getAssociatedObject 

...

- (void) collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewCell* cell = [collectionView cellForItemAtIndexPath:indexPath]; 

    UIImageView* iv = cell.contentView.subviews.lastObject; 

    UIImageView* ivExpand = [[UIImageView alloc] initWithImage: iv.image]; 
    ivExpand.contentMode = iv.contentMode; 
    ivExpand.frame = [self.view convertRect: iv.frame fromView: iv.superview]; 
    ivExpand.userInteractionEnabled = YES; 
    ivExpand.clipsToBounds = YES; 

    objc_setAssociatedObject(ivExpand, 
           "original_frame", 
           [NSValue valueWithCGRect: ivExpand.frame], 
           OBJC_ASSOCIATION_RETAIN); 

    [UIView transitionWithView: self.view 
         duration: 1.0 
         options: UIViewAnimationOptionAllowAnimatedContent 
        animations:^{ 

         [self.view addSubview: ivExpand]; 
         ivExpand.frame = self.view.bounds; 

        } completion:^(BOOL finished) { 

         UITapGestureRecognizer* tgr = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(onTap:)]; 
         [ivExpand addGestureRecognizer: tgr]; 
        }]; 
} 

- (void) onTap: (UITapGestureRecognizer*) tgr 
{ 
    [UIView animateWithDuration: 1.0 
        animations:^{ 

         tgr.view.frame = [objc_getAssociatedObject(tgr.view, 
                    "original_frame") CGRectValue]; 
        } completion:^(BOOL finished) { 

         [tgr.view removeFromSuperview]; 
        }]; 
} 
+0

спасибо за ваш комментарий, я бы попробовал этот код вчера. но, похоже, немного из моего ожидания ... после заполнения вашего кода выше, когда я касаюсь фотографии, он расширяется до полноэкранного режима, но моя панель вкладок и панель навигации все еще там, и когда я просматриваю окно вверх или вниз , фото просто вставьте туда. Я надеюсь, что после того, как пользователь войдет в полноэкранный режим, пользователь все равно сможет провести другие фотографии. Я просматриваю другие вопросы, может быть, мне нужно нажать на другой контроллер представления? Тем временем, я надеюсь, что пользователь может только проскочить одну фотографию один раз, немного подпрыгнуть, как встроенная в полноэкранную галерею фотокамер iOS. –

+0

, если вы хотите, чтобы он наложил вкладку и навигационные контроллеры, измените [self.view addSubview: ivExpand]; to [self.view.window addSubview] ;. Вам также потребуется обновить callRectRect: вызов. Добавление полного полноэкранного просмотра галереи - это немного больше работы, да. – TomSwift

0

Вы вы правы, метод делегата Использовать UICollectionView в:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //get UIImage from source 
    //show (add subView) UIImageView with full screen frame 
    //add gesture for double tap on which remove UIImageView 
} 
Смежные вопросы