亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS自定義collectionView實現毛玻璃效果

2020-07-26 03:11:47
字體:
來源:轉載
供稿:網友

先來看看效果圖,由于錄屏軟件不給力,毛玻璃效果不明顯,請見諒。

步驟詳解:

說下思路,很簡單,首先自定義一個collectionView, 重寫它的initWithFrame:collectionViewLayout:方法,在這里面做配置,這里用的是AXECollectionView.

與之對應的自定義一個collectionViewCell,在cell里配置操作:設置layer涂層,加載圖片等操作,這里用的是AXECollectionViewCell.

最后在需要展示的控制器里調用AXECollectionView,給它傳入一個自定義的流水布局和圖片數組,大功告成.

示例代碼如下:

// viewController@interface ViewController ()@property (nonatomic, strong) AXECollectionView *collectionView;@end@implementation ViewController- (void)viewDidLoad {  [super viewDidLoad];  // 流水布局  UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];  flowLayout.minimumLineSpacing = kItem_Margin;  flowLayout.minimumInteritemSpacing = [UIScreen mainScreen].bounds.size.height;  flowLayout.itemSize = CGSizeMake([UIScreen mainScreen].bounds.size.width - kItem_Margin, kItem_Height);  flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;  flowLayout.sectionInset = UIEdgeInsetsMake(0, kItem_Margin / 2, 0, kItem_Margin / 2);  CGRect frame = self.view.bounds;  _collectionView = [[AXECollectionView alloc] initWithFrame:frame collectionViewLayout:flowLayout];  // 傳入圖片數組  _collectionView.imgArr = @[                @"0",                @"1",                @"2",                @"3",                @"4",                @"5",                @"6",                @"7",                ];  [self.view addSubview:_collectionView];}// AXECollectionView.h@interface AXECollectionView : UICollectionView@property (nonatomic, strong) NSArray *imgArr;@end// AXECollectionView.m@interface AXECollectionView () <UICollectionViewDelegate, UICollectionViewDataSource>// 背景imgView@property (nonatomic, strong) UIImageView *bgImgView;@end@implementation AXECollectionViewstatic NSString *const AXECollectionViewCellID = @"AXECollectionViewCell";- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout{  if(self = [super initWithFrame:frame collectionViewLayout:layout])  {    [self setup];  }  return self;}- (void)setup{  self.showsVerticalScrollIndicator = NO;  self.showsHorizontalScrollIndicator = NO;  self.pagingEnabled = YES;  self.dataSource = self;  self.delegate = self;  [self registerClass:[AXECollectionViewCell class] forCellWithReuseIdentifier:AXECollectionViewCellID];  // collectionView背景view  UIImageView *bgImgView = [[UIImageView alloc] initWithFrame:self.bounds];  self.backgroundView = bgImgView;  self.bgImgView = bgImgView;  // 毛玻璃效果 (iOS8.0以后適用)  UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];  UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];  effectView.frame = self.bounds;  [self.backgroundView addSubview:effectView];}#pragma mark - UICollectionViewDataSource- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{  AXECollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:AXECollectionViewCellID forIndexPath:indexPath];  cell.img = self.imgArr[indexPath.row];  // 設置毛玻璃圖片  self.bgImgView.image = [UIImage imageNamed:self.imgArr[indexPath.row]];  return cell;}- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{  return self.imgArr.count;}#pragma mark - UICollectionViewDelegate- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath{  AXECollectionViewCell *myCell = (AXECollectionViewCell *)cell;  [UIView animateWithDuration:0.5 animations:^{    myCell.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.4);  }];}

補充一下

例子中我是用的UIBlurEffect做的毛玻璃效果,這個是iOS8以后出現的,如果你要適配7的系統,那就要另做配置.

如果不用UIBlurEffect的話,下面這兩種同樣能做出模糊效果,只不過第一種性能較差,建議大家按需使用.

// 返回濾鏡處理后圖片- (UIImage *)coreBlurImage:(UIImage *)image withBlurNumber:(CGFloat)blur{  CIContext *context = [CIContext contextWithOptions:nil];  CIImage *inputImage= [CIImage imageWithCGImage:image.CGImage];  // 設置filter  CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];  [filter setValue:inputImage forKey:kCIInputImageKey];  [filter setValue:@(blur) forKey: @"inputRadius"];  // 模糊圖片  CIImage *result=[filter valueForKey:kCIOutputImageKey];  CGImageRef outImage=[context createCGImage:result fromRect:[result extent]];  UIImage *blurImage=[UIImage imageWithCGImage:outImage];  CGImageRelease(outImage);  return blurImage;}// 返回高斯效果模糊圖片- (UIImage *)boxblurImage:(UIImage *)image withBlurNumber:(CGFloat)blur{  if (blur < 0.f || blur > 1.f) {    blur = 0.5f;  }  int boxSize = (int)(blur * 40);  boxSize = boxSize - (boxSize % 2) + 1;  CGImageRef img = image.CGImage;  vImage_Buffer inBuffer, outBuffer;  vImage_Error error;  void *pixelBuffer;  // 從CGImage中獲取數據  CGDataProviderRef inProvider = CGImageGetDataProvider(img);  CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);  // 設置從CGImage獲取對象的屬性  inBuffer.width = CGImageGetWidth(img);  inBuffer.height = CGImageGetHeight(img);  inBuffer.rowBytes = CGImageGetBytesPerRow(img);  inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);  pixelBuffer = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img));  if(pixelBuffer == NULL)    NSLog(@"No pixelbuffer");  outBuffer.data = pixelBuffer;  outBuffer.width = CGImageGetWidth(img);  outBuffer.height = CGImageGetHeight(img);  outBuffer.rowBytes = CGImageGetBytesPerRow(img);  error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);  if (error) {    NSLog(@"error from convolution %ld", error);  }  CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();  CGContextRef ctx = CGBitmapContextCreate( outBuffer.data, outBuffer.width, outBuffer.height, 8, outBuffer.rowBytes, colorSpace, kCGImageAlphaNoneSkipLast);  CGImageRef imageRef = CGBitmapContextCreateImage (ctx);  UIImage *returnImage = [UIImage imageWithCGImage:imageRef];  // clean up  CGColorSpaceRelease(colorSpace);  free(pixelBuffer);  CFRelease(inBitmapData);  CGColorSpaceRelease(colorSpace);  CGImageRelease(imageRef);  return returnImage;}

總結

以上就是iOS自定義collectionView實現毛玻璃效果的全部內容,希望能對各位iOS開發者們有一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
y97精品国产97久久久久久| 亚洲在线视频观看| 亚洲福利小视频| 欧美黑人狂野猛交老妇| 亚洲国产97在线精品一区| 日韩在线一区二区三区免费视频| 日韩专区在线观看| 91沈先生在线观看| 国产色婷婷国产综合在线理论片a| 久久久视频精品| 亚洲第一中文字幕| 欧美丰满少妇xxxxx做受| 国产精品美女久久久久av超清| 欧美在线一区二区视频| 国产日韩在线播放| 日韩欧美在线视频日韩欧美在线视频| 亚洲一区二区黄| 国产精品一区久久久| 91网在线免费观看| 欧美日韩一区二区在线播放| 91wwwcom在线观看| 国产精品久久久久久影视| 国产一区二区三区视频| 51视频国产精品一区二区| 亚洲理论片在线观看| 日韩av免费看网站| 亚洲精品一区在线观看香蕉| 亚洲精品小视频在线观看| 色哟哟网站入口亚洲精品| 国产一区二区三区精品久久久| 成人97在线观看视频| 2019中文字幕在线| 国产精品大片wwwwww| 亚洲精品免费一区二区三区| 国产精品午夜国产小视频| 欧美大片网站在线观看| 成人免费视频网址| 日韩在线观看视频免费| 亚洲国产精品久久久| 日韩中文字幕欧美| 国产婷婷成人久久av免费高清| 欧美日韩国产影院| 亚洲va男人天堂| 久久精品国产久精国产一老狼| 亚洲国产日韩欧美在线动漫| 国产精品国模在线| 国产欧美在线播放| 成人久久一区二区三区| www.亚洲男人天堂| 日韩av电影中文字幕| 国产精品视频地址| 一区国产精品视频| 伊人成人开心激情综合网| 久久99久久99精品免观看粉嫩| 亚洲精品福利免费在线观看| 日韩精品在线观看网站| 九九热r在线视频精品| 精品呦交小u女在线| 国产91热爆ts人妖在线| 亚洲精品日韩av| 国内精品久久久久久久| 亚洲欧美日本精品| 亚洲第一区在线| 欧美最猛性xxxxx(亚洲精品)| 亚洲影院污污.| 久久久久久网址| 成人亚洲欧美一区二区三区| 亚洲一区二区免费| 欧美在线影院在线视频| 色视频www在线播放国产成人| 成人欧美一区二区三区黑人| 国产精品久久久久久久久久尿| 久久99精品国产99久久6尤物| 成人av.网址在线网站| 日韩av在线网页| 日韩h在线观看| 国产精品久久久久久中文字| 亚洲天堂成人在线视频| 欧美性开放视频| 中文字幕免费精品一区高清| 国产精品99久久久久久人| 国产成人亚洲综合青青| 亚洲理论电影网| 色偷偷亚洲男人天堂| 亚洲激情视频在线播放| 91久久精品在线| 亚洲91av视频| 日韩在线视频线视频免费网站| 日韩电影第一页| 久久精品夜夜夜夜夜久久| 国产网站欧美日韩免费精品在线观看| 亚洲美女精品久久| 成人在线小视频| 欧美激情图片区| 国产精品久久99久久| 日韩av成人在线| 久久综合免费视频| 久久亚洲成人精品| 欧美国产视频日韩| 国产一区二区三区久久精品| 国产成人精品999| 欧美精品久久久久久久久久| 综合国产在线观看| 国产成人精品亚洲精品| 久久国产精品久久久久| 久久韩剧网电视剧| 欧美一区二区三区免费观看| 亚洲一区中文字幕| 九九热精品视频国产| 欧美激情视频在线观看| 欧美丰满少妇xxxxx| 国产在线观看精品| 亚洲国产欧美一区二区三区同亚洲| 久久亚洲国产精品成人av秋霞| 亚洲最大av在线| 不卡在线观看电视剧完整版| 日韩av最新在线| 91成人福利在线| 国产欧美在线观看| 永久555www成人免费| 日韩高清av一区二区三区| 亚洲专区国产精品| 精品国产91久久久久久老师| 欧美激情在线观看| 欧美激情伊人电影| 日日骚av一区| 亚洲在线www| 日产精品99久久久久久| 午夜精品久久久久久久男人的天堂| 国产精品一区二区三区久久久| 久久精品国产2020观看福利| 久久精品国产亚洲精品2020| 欧美日韩国产综合视频在线观看中文| 亚洲精品之草原avav久久| 日韩免费看的电影电视剧大全| 亚洲国产精久久久久久久| 亚洲va男人天堂| 日韩欧美aⅴ综合网站发布| 欧美亚洲国产日韩2020| 亚洲一区国产精品| 日韩在线观看免费全| 91精品久久久久久久久青青| 国产在线一区二区三区| 国产免费一区视频观看免费| 国产视频精品va久久久久久| 成人福利在线视频| 久久国产精品久久精品| 一本一本久久a久久精品综合小说| 日韩中文字幕第一页| 91精品国产沙发| 97色在线视频观看| 欧美贵妇videos办公室| 欧美日韩电影在线观看| 亚洲精品一区二三区不卡| 亚洲一区二区三区视频| 精品一区二区三区电影| 亚洲伊人成综合成人网| 亚洲午夜未删减在线观看| 亚洲欧美国产精品va在线观看| 欧美日韩国产精品一区二区不卡中文| 亚洲国产免费av| 免费不卡在线观看av| 亚洲午夜性刺激影院| 成人av在线天堂|