user12346
user12346

Reputation: 107

Get the position of imageview dynamically

I need to get the dynamic x,y position of the image view. I have tried this

self.imgView.bounds.origin.y

and

self.imgView.frame.origin.x

I am getting 0.0 all the time.

How can i get this?

Thanks

Upvotes: 1

Views: 1305

Answers (3)

Mike Atkins-Spelling
Mike Atkins-Spelling

Reputation: 524

Bounds will always return an x and y of 0, you want to use frame. In your example these values may be correct? Try adding your imageView in the centre of the view and logging the:

self.imgView.frame.origin.x
self.imgView.frame.origin.y

Upvotes: 0

Lou Franco
Lou Franco

Reputation: 89172

The bounds.origin of any view should be (0,0) at all times since it is the coordinate system of the view itself (relative to its origin)

The frame.origin is in the coordinate system of the its superview, so if it's 0,0, then that might be that its origin is at its superview's origin.

Maybe you want to know the origin with respect to the screen? If so,

let posInWindow = v.convert(v.bounds.origin, to: nil)

Upvotes: 1

Prashant Tukadiya
Prashant Tukadiya

Reputation: 16446

Please use below code to get rect in UIImageVIew This code in swift3 And your ImageViewContentMode should be Aspect fit

 func calculateRectOfImageInImageView(imageView: UIImageView) -> CGRect {
    let imageViewSize = imageView.frame.size
    let imgSize = imageView.image?.size

    guard let imageSize = imgSize, imgSize != nil else {
        return CGRect.zero
    }

    let scaleWidth = imageViewSize.width / imageSize.width
    let scaleHeight = imageViewSize.height / imageSize.height
    let aspect = fmin(scaleWidth, scaleHeight)

    var imageRect = CGRect(x: 0, y: 0, width: imageSize.width * aspect, height: imageSize.height * aspect)
    // Center image
    imageRect.origin.x = (imageViewSize.width - imageRect.size.width) / 2
    imageRect.origin.y = (imageViewSize.height - imageRect.size.height) / 2

    // Add imageView offset
    imageRect.origin.x += imageView.frame.origin.x
    imageRect.origin.y += imageView.frame.origin.y

    return imageRect
}

Upvotes: 0

Related Questions