cari

Rumah  >  Soal Jawab  >  teks badan

objektif-c - masalah gelongsor ios mengenai tableview atau scrollView

Seperti tajuk
begini
Kesan yang ingin saya capai ialah
sambil meluncur ke bawah,seperti gambar di bawah

Ini dibuat dengan paparan meja Sekarang apabila anda meluncurkannya di sini, ia tidak akan bergerak. Apa yang saya mahu capai ialah apabila warna biru tidak mencapai separuh daripada skrin (kira-kira kedudukan itu akan berfungsi), ia akan kembali secara automatik. baris pertama, yang hanya yang merah OK, jika melebihi, seperti yang ditunjukkan di bawah

.

Ia akan secara automatik meluncur ke baris biru Bagaimana untuk melaksanakan perubahan ini adalah lebih mudah?

PHP中文网PHP中文网2739 hari yang lalu864

membalas semua(1)saya akan balas

  • 欧阳克

    欧阳克2017-06-20 10:08:07

    Anda bercakap tentang susun atur kad, anda boleh menggunakan UICollectionView dan UICollectionViewFlowLayout tersuai untuk mencapainya, alamat Demo

    // 修改cell滑动时大小
    - (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect
    {
        
        NSArray *attrs = [[NSArray alloc] initWithArray:[super layoutAttributesForElementsInRect:self.collectionView.bounds] copyItems:YES];
        CGFloat scale;
        CGFloat offset;
        for (UICollectionViewLayoutAttributes *attr in attrs) {
            // 设置collection在滑动时, cell的大小
            if (self.scrollDirection == UICollectionViewScrollDirectionHorizontal) {
                offset = fabs(attr.center.x - self.collectionView.contentOffset.x - self.collectionView.bounds.size.width * 0.5);
                scale = 1 - offset / (self.collectionView.bounds.size.width * 0.5) * 0.25;
                attr.transform = CGAffineTransformMakeScale(scale, scale);
            } else {
                offset = fabs(attr.center.y - self.collectionView.contentOffset.y - self.collectionView.bounds.size.height * 0.5);
                scale = 1 - offset / (self.collectionView.bounds.size.height * 0.5) * 0.25;
                
            }
            attr.transform = CGAffineTransformMakeScale(scale, scale);
        }
        
        return attrs;
    }
    
    // 返回collection滑动手指松开后, collection最终的contentOffset
    - (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
    {
        if (self.scrollDirection == UICollectionViewScrollDirectionHorizontal) {
            // cell 宽度
            CGFloat itemW = self.itemSize.width;
            // cell边框距离(未设置collection的contentInset, 默认为0)
            CGFloat margin = self.collectionView.contentInset.left;
            // collection在手指松开后,collection滑动到停止时, collectioncontentOffset
            CGFloat index = roundf((proposedContentOffset.x + margin) / itemW);
            // 修改collection最终的contentOffset, 使collection滑动到cell中间
            proposedContentOffset.x = index * self.collectionView.bounds.size.width - (index + 1) * margin;
        } else {
            CGFloat itemH = self.itemSize.height;
            CGFloat margin = self.collectionView.contentInset.top;
            CGFloat index = roundf((proposedContentOffset.y + margin) / itemH);
            proposedContentOffset.y = index * self.collectionView.bounds.size.height - (index+1) * margin;
        }
        return proposedContentOffset;
    }

    balas
    0
  • Batalbalas