iOS 根據UIImage 修改UIImageView Frame (包括截取圖片中間部分)


iOS UIImageView 根據需求調整frame

1、圖片的寬和高不相等,截取圖片的中間部分,截取的部分Size明確

2、圖片的寬度要等於其父視圖的類的寬度,然后根據寬度計算高度,保證

圖片不變形,顯示正常

3、圖片的寬度或高度大於其父視圖的類的寬的或高度,如果是寬度的問題,

就以其父視圖的寬度為准,確定圖片的顯示寬度;如果是高度的問題,就以

其父視圖的高度為准,確定圖片的顯示高度。

以上三種情況,具體示例依次如下:

    

第一種情況,調用方法:

- (void)imageLoadedFinish:(UrlImageView *)oldImageView image:(UIImage *)imageV skuInfo:(NSDictionary *)skuInfo

{
      截取的目標尺寸

       float imgW = (WIN_SIZE.width-40)/3;

        //截取中間部分

        oldImageView.image = [self squareImageFromImage:imageV scaledToSize:imgW];

}

 

---截圖操作 //截取中間部分

- (UIImage *)squareImageFromImage:(UIImage *)image scaledToSize:(CGFloat)newSize

{

   --縮放比例

    CGAffineTransform scaleTransform;

    CGPoint origin;

    圖片大小大於圖片高度的情況

    if (image.size.width > image.size.height)

    {

        //image原始高度為200,縮放image的高度為400pixels,所以縮放比率為2

   

 計算縮放比例

       CGFloat scaleRatio = newSize / image.size.height;

        scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio);

        //設置繪制原始圖片的畫筆坐標為CGPoint(-100, 0)pixels

      計算畫筆的X軸

        origin = CGPointMake(-(image.size.width - image.size.height) / 2.0f, 0);

    } else

    {

      圖片的高度大於寬度的情況

        CGFloat scaleRatio = newSize / image.size.width;

        scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio);

        計算畫筆的Y軸

        origin = CGPointMake(0, -(image.size.height - image.size.width) / 2.0f);

    }

   

    CGSize size = CGSizeMake(newSize, newSize);

    //創建畫板為(400x400)pixels

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])

    {

        UIGraphicsBeginImageContextWithOptions(size, YES, 0);

    } else

    {

        UIGraphicsBeginImageContext(size);

    }

  

 CGContextRef context = UIGraphicsGetCurrentContext();

    //將image原始圖片(400x200)pixels縮放為(800x400)pixels

    CGContextConcatCTM(context, scaleTransform);

    //origin也會從原始(-100, 0)縮放到(-200, 0)

    [image drawAtPoint:origin];

   

    //獲取縮放后剪切的image圖片

    image = UIGraphicsGetImageFromCurrentImageContext();

    結束畫板繪制

    UIGraphicsEndImageContext();

   

    return image;

}

 

 

第二種情況:

      //等比例縮放

-(void)imageLoadedFinish:(UrlImageView *)oldImageView image:(UIImage *)imageV skuInfo:(NSDictionary *)skuInfo

{    得到當前視圖的frame

        CGSize selfSize = self.frame.size;

       得到image的frame

        CGSize imageSize = imageV.size;

       得到imageView 的frame

        CGRect imageVRect = self.imageView.frame;

       確定imageView 的寬度

        imageVRect.size.width = selfSize.width;

       根據寬度計算imageView 的高度

        imageVRect.size.height = imageVRect.size.width*imageSize.height/imageSize.width;

        //計算x,y

        imageVRect.origin.x = 0;

        imageVRect.origin.y = 0;

        self.imageView.frame = imageVRect;

        CGRect selfRect = self.frame;

        selfRect.size.width = imageVRect.size.width;

        selfRect.size.height = imageVRect.size.height;

        self.frame = selfRect;

}

 

第三種情況:

//等比例縮放

(void)imageLoadedFinish:(UrlImageView *)oldImageView image:(UIImage *)imageV skuInfo:(NSDictionary *)skuInfo

{     

       得到當前視圖的frame

       CGSize selfSize = self.frame.size;

       得到當前Image的frame

        CGSize imageSize = imageV.size;

       得到當前ImageView 的frame

        CGRect imageVRect = self.imageView.frame;

       image的寬度大於當前視圖的寬度

        if(imageSize.width > selfSize.width)

        {

            根據寬度計算高度,確定寬度

            imageVRect.size.height = selfSize.width * imageSize.height / imageSize.width;

            imageVRect.size.width = selfSize.width;

        }

        image的高度大於當前視圖的高度

        if(imageVRect.size.height > selfSize.height)

        {

               

根據高度計算寬度,確定寬度

            imageVRect.size.width = selfSize.height * imageVRect.size.width  / imageVRect.size.height;

            imageVRect.size.height = selfSize.height;

        }

 

//計算x,y

        imageVRect.origin.x = (selfSize.width-imageVRect.size.width)/2;

        imageVRect.origin.y = (selfSize.height-imageVRect.size.height)/2;

        self.imageView.frame = imageVRect;

}

                 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM