I have a UIImageView
in which I have a UIImage
obviously. I want to create a shadow effect only on the UIImage
. My problem is that I cannot get the CGRect
of the UIImage
inside the UIImageView
so I can apply the shadow effect on it by using the following method.
[mImageView.layer.shadowColor = [UIColor grayColor].CGColor;
mImageView.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
mImageView.layer.shadowOpacity = 0.9f;
mImageView.layer.masksToBounds = NO;
CGRect imageFrame = mImageView.frame;
UIEdgeInsets shadowInsets = UIEdgeInsetsMake(0, 0, -1.5f, 0);
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:UIEdgeInsetsInsetRect(imageFrame, shadowInsets)];
mImageView.layer.shadowPath = shadowPath.CGPath;
Please consider the image attached for this problem.
The problem is critical too because the UIImage
can be an image of a rigid dimension because it is a cropped image as you can see in the picture attached.
The UIImageView’s
bound is equal to the view’s bound here. So when applying the effect using the method above, it creates a UIBezierPath
on the whole UIImageView
, not only to the UIImage
. As in the method, I cannot get the exact CGRect
of the UIImage
.
Any solution? What am I missing?
UIImage is always rectangular, so is UIImageView. I believe you want to put shadow only around the jagged border of the cropped area right? If that is the case, you cannot use this method. You need to use CoreGraphics or others, to get the effect you want. For example, you can create a copy of this image in memory, blackened it, and blur it and paste it behind your image to create a shadowy effect.