4

在我的項目中,我使用的是UICollectionView來顯示圖像,我也在中使用UIImageView。 我想要的只是當我點擊一張圖片時,它應該展開並全屏顯示。 爲此,我創建了一個新視圖,其上需要UIImageView並在UICollectionViewCells上應用TapGesture。 展開的圖像在下一個視圖中打開,但沒有出現在我給它的框架中。 也當我點擊任何圖片時,它從集合視圖中刪除。請告訴我如何重新加載UICollectionViewCellsenter image description here 請建議我如何將圖像放在規定的框架上。 我分享我的代碼如何在UICollectionView中點擊時將圖像展開爲完整視圖?

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath]; 

    imgview = (UIImageView *)[cell viewWithTag:100]; 
    imgview = [[UIImageView alloc]initWithFrame:CGRectMake(0,0,160, 160)]; 

    imgview.image = [UIImage imageNamed:[imagearray objectAtIndex:indexPath.row]]; 
    //cell.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:[imagearray objectAtIndex:indexPath.row]]]; 
    [cell.contentView addSubview:imgview]; 

    UITapGestureRecognizer *tapped = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(expandImage:)]; 
    tapped.numberOfTapsRequired = 1; 
    [imgview setUserInteractionEnabled:YES]; 
    imgview.tag = indexPath.row; 
    [imgview addGestureRecognizer:tapped]; 

    [cell.contentView addSubview:imgview]; 

    return cell; 
} 

-(void)expandImage:(UITapGestureRecognizer*)recogniser 
{ 
    UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(0, 50, self.view.frame.size.width , self.view.frame.size.height)]; 
    view1.backgroundColor = [UIColor greenColor]; 
    [self.view addSubview:view1]; 

    UIButton *closeButton = [[UIButton alloc]initWithFrame:CGRectMake(310, 10, 50, 40)]; 
    [closeButton setTitle:@"Close" forState:UIControlStateNormal]; 
    [closeButton addTarget:self action:@selector(Closetab) forControlEvents:UIControlEventTouchUpInside]; 
    [view1 addSubview:closeButton]; 

    UIImageView *photoView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 70, self.view.frame.size.width, self.view.frame.size.height-200)]; 
    [photoView setBackgroundColor:[UIColor blueColor]]; 
    [view1 addSubview:photoView]; 
    photoView.accessibilityIdentifier = @"nature2.png"; 

    UIImageView *photoView1 = (UIImageView*)recogniser.view; 
    photoView1.accessibilityIdentifier = @"nature2.png"; 

    //photoView.clipsToBounds = YES; 

    // photoView.accessibilityIdentifier = @"apple1.png"; 

    photoView1.contentMode = UIViewContentModeScaleAspectFill; 

    //photoView1.clipsToBounds = YES; 
    [view1 addSubview:photoView1]; 
} 
+0

添加一些快照 –

+0

我不有足夠的聲望(15)分數添加快照把我的問題投票了,然後我會添加它的快照 –

+0

imageView是否出現?幀是否錯誤? – Aris

回答

1

因此,最好在窗口中添加視圖,以便全屏顯示。使用以下代碼。

UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(0, 50, self.view.frame.size.width , self.view.frame.size.height)]; 
    view1.backgroundColor = [UIColor greenColor]; 
    [self.view.window addSubview:view1]; 
+0

如果你可以添加快速版本 – marrioa

1

一種更簡單的方式來實現,這將是推動,而不是將其添加爲一個子視圖爲您顯示全屏畫面有新的觀點。

您還可以自定義導航控制器的過渡動畫以適應您的需求。

1

好吧,不要把任何事情視爲理所當然的事情,因爲有一件事情是肯定的,那就是看着代碼讓我感到困惑。但這裏是我怎麼看它,哪裏出了問題:

UIImageView *photoView1 = (UIImageView*)recogniser.view; 
    [view1 addSubview:photoView1]; 

與那些2線正在從電池獲取了你的觀點,並把它放在這個新廠景。 所以只要分配新的UIImageVIew並設置其圖像可以解決它。 還有一些建議:

imgview = (UIImageView *)[cell viewWithTag:100]; 
    imgview = [[UIImageView alloc]initWithFrame:CGRectMake(0,0,160, 160)]; 

這裏第一行代碼沒有做任何事。您設置對象,然後再次設置該對象。 接下來的事情是不要在cellForItemAtIndexPath添加子視圖,而不刪除以前添加。當將細胞排出時,您一次又一次地使用相同的細胞,因此您將通過將視圖彼此堆疊來創建內存泄漏。你甚至可以通過用自己的UIImageView創建自定義單元來省略所有添加的東西。接下來就沒有必要使用手勢識別的CollectionView有這樣的一個代表:

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 

你可以用它代替您expandImage方法,裏面你只是簡單地從imagearray讓你的形象。 最後還有這個美麗的圖書館可供您使用,MHFacebookImageViewer

1

navigationController.view

UIImageView *imgView =[[UIImageView alloc]initWithFrame:self.view.bounds]; 
[self.navigationController.view addSubview:imgView]; 
0

我這段代碼 首先加點觸手勢 完成上述添加imageview然後採用下列代碼

-(void)expandImage:(UITapGestureRecognizer*)recogniser 
{ 

    view1.hidden = NO; 

    UIImageView *photoView1 = (UIImageView*)recogniser.view; 
    photoView1.frame = CGRectMake(0, 0, self.view.frame.size.width, 510); 
    photoView1.accessibilityIdentifier = @"nature2.png"; 

    //photoView.clipsToBounds = YES; 

    // photoView.accessibilityIdentifier = @"apple1.png"; 

    photoView1.contentMode = UIViewContentModeScaleAspectFill; 

    photoView1.clipsToBounds = YES; 

    [view1 addSubview:photoView1]; 
    } 
相關問題