Get width of a resized image after UIViewContentModeScaleAspectFit

前端 未结 6 1643
忘了有多久
忘了有多久 2021-01-30 13:56

I have my UIImageView and I put an image into it that I resize like this:

UIImageView *attachmentImageNew = [[UIImageView alloc] initWithFrame:CGRectMake(5.5, 6.         


        
相关标签:
6条回答
  • 2021-01-30 14:31

    For Swift 2, you can use this code snippet to align an aspectFitted image to the bottom of the screen (sampled from earlier answers to this question -> thanks to you, guys)

    let screenSize: CGRect = UIScreen.mainScreen().bounds
    let screenWidth = CGFloat(screenSize.width)
    let screenHeight = CGFloat(screenSize.height)
    
    imageView.frame = CGRectMake(0, screenHeight - (imageView.image?.size.height)! , screenWidth, (imageView.image?.size.height)!)
    
    let newSize:CGSize = getScaledSizeOfImage(imageView.image!, toSize: self.view.frame.size)
    
    imageView.frame = CGRectMake(0, screenHeight - (newSize.height) , screenWidth, newSize.height)
    
    func getScaledSizeOfImage(image: UIImage, toSize: CGSize) -> CGSize       
    {
        let widthRatio = toSize.width/image.size.width
        let heightRatio = toSize.height/image.size.height
        let scale = min(widthRatio, heightRatio)
        let imageWidth = scale*image.size.width
        let imageHeight = scale*image.size.height
        return CGSizeMake(imageWidth, imageHeight)
    }
    
    0 讨论(0)
  • 2021-01-30 14:35

    It has the reference of your original image, so always gives the same dimensions as of original image.

    To get the dimensions of new image you have to check aspect ratio. I have derived a formula for my need using different images of different size using Preview that how it resizes image according to its aspect ratio.

    0 讨论(0)
  • 2021-01-30 14:36

    A solution in Swift:

    let currentHeight = imageView.bounds.size.height
    let currentWidth = imageView.bounds.size.width
    let newWidth = UIScreen.mainScreen().bounds.width
    let newHeight = (newWidth * currentHeight) / currentWidth
    
    println(newHeight)
    
    0 讨论(0)
  • 2021-01-30 14:38

    I don't know is there more clear solution, but this works:

    float widthRatio = imageView.bounds.size.width / imageView.image.size.width;
    float heightRatio = imageView.bounds.size.height / imageView.image.size.height;
    float scale = MIN(widthRatio, heightRatio);
    float imageWidth = scale * imageView.image.size.width;
    float imageHeight = scale * imageView.image.size.height;
    
    0 讨论(0)
  • 2021-01-30 14:49

    in your case:

    float yourScaledImageWitdh =  attachmentImageNew.frame.size.height *  attachmentImageNew.image.size.width / attachmentImageNew.image.size.height
    NSLog(@"width of resized pic is %f", yourScaledImageWitdh);
    

    but you should also check, before, the original image proportion vs the imageView proportion, my line of code is good just in case the red area is added horizontally, not in case your original image proportion is wider than the imageView frame proportion

    0 讨论(0)
  • 2021-01-30 14:53

    According to Apple's Documentation for UIViewContentModeScaleAspectFit

    It Scales the content (In your case actualImage) to fit the size of the view (In your case attachmentImageNew) by maintaining the aspect ratio.

    That means your image size ( after the scaling ) should be same as your UIImageView.

    UPDATE :

    One new Suggestion to you if you don't want to use UIViewContentModeScaleAspectFit and if you can fix the size of scaledImage then you can use below code to scale the image for fix newSize and then you can use the width to your code.

    CGSize newSize = CGSizeMake(100.0,50.0);
    UIGraphicsBeginImageContext( newSize );
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    0 讨论(0)
提交回复
热议问题