zoukankan      html  css  js  c++  java
  • UIImageView的属性contentMode

    UIImageView的属性contentMode

      实现网络图片根据UIImageView的大小来等比例缩放显示。

      苹果自带的有设置UIImageView的contentMode属性,

        UIViewContentModeScaleToFill
        UIViewContentModeScaleAspectFit
        UIViewContentModeScaleAspectFill
        UIViewContentModeRedraw
        UIViewContentModeCenter
        UIViewContentModeTop
        UIViewContentModeBottom
        UIViewContentModeLeft
        UIViewContentModeRight
        UIViewContentModeTopLeft
        UIViewContentModeTopRight
        UIViewContentModeBottomLeft
        UIViewContentModeBottomRight

    注意以上几个常量,凡是没有带Scale的,当图片尺寸超过 ImageView尺寸时,只有部分显示在ImageView中。UIViewContentModeScaleToFill属性会导致图片变形。 UIViewContentModeScaleAspectFit会保证图片比例不变,而且全部显示在ImageView中,这意味着ImageView 会有部分空白。UIViewContentModeScaleAspectFill也会证图片比例不变,但是是填充整个ImageView的,可能只有部 分图片显示出来。

    我们也可下载图片获取图片的原始宽高,然后根据比例重新设置图片的大小也是可以的,不过这种的话就可能会出现问题了,先下载获取一次之后又给imageView赋值时就会出现缓慢延迟的现象,这是在赋值时又下了一遍,不赞成使用。

    //获取网络图片的宽高

    + (CGSize)getImageSizeWithURL:(NSURL *)url {

    //    1.创建CGImageSourceRef

        CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)url, NULL);

        CGFloat width = 0.0f, height = 0.0f;

        

        if (imageSource)

        {

    //        获取图像的属性信息

            CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);

            

            if (imageProperties != NULL)

            {

                CFNumberRef widthNum  = CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth);

                if (widthNum != NULL) {

                    NSNumber *num = (__bridge NSNumber *)(widthNum);

                    width = [num floatValue];

                    //                CFNumberGetValue(widthNum, kCFNumberFloatType, &width);

                }

                

                CFNumberRef heightNum = CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight);

                if (heightNum != NULL) {

                    NSNumber *num = (__bridge NSNumber *)(heightNum);

                    height = [num floatValue];

                    //                CFNumberGetValue(heightNum, kCFNumberFloatType, &height);

                }

                

                CFRelease(imageProperties);

            }

            CFRelease(imageSource);

        }

        return CGSizeMake(width, height);

    }

     第三种,就是使用SDWebImage的方法了,也可以实现吧,效果还可以

    [self.toyImgView sd_setImageWithURL:[NSURL URLWithString:model.picture] placeholderImage:nil options:SDWebImageRetryFailed completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {

            

            NSLog(@"*****%lf",image.size.width);

            NSLog(@"******%lf",image.size.height);

            

        }];

     大家根据不同的情况使用不同的方法吧。

  • 相关阅读:
    Jedis客户端以及redis中的pipeline批量操作
    Redis5.x两种持久化方式以及主从复制配置
    博客园原创文章防剽窃、反爬虫指南(持续更新.....)
    【金主打赏榜】
    Swift LeetCode 目录 | Catalog(每周日更新......)
    [Swift]SkeletonView:在UITableView中使用骨架屏
    【Xcode】加快Xcode编译调试速度
    【Xcode】ITMS-90809:查找UIWebView
    [Swift]PhotoKit-照片框架
    [SourceTree]remote: HTTP Basic: Access denied
  • 原文地址:https://www.cnblogs.com/19940122yzc/p/5698881.html
Copyright © 2011-2022 走看看