简体   繁体   中英

Need help about contentMode and autoresizingMask of UIImageView

i have picture like this image it will present on Landscape Mode

替代文字

so if rotate device to Portrait, how to present image like this

替代文字

Use an UIImageView with these settings:

imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                              UIViewAutoresizingFlexibleHeight);

imageView.contentMode = UIViewContentModeScaleAspectFit;

It looks like what you're trying to do is clip the image on the right, while leaving the top, left, and bottom the same.

Two things to try:

1) Subclass UIView and in the drawRect method, adjust the rect and draw out the clipped image using CGContextDrawImage (context, rect, sourceImage.CGImage) .

2) Use CALayers. You can adjust the 'contentsRect' of the imageView's layer:

CALayer* imageLayer = imageView.layer;
imageLayer.masksToBounds = YES;
CGRect rect;
if (inPortrait)
  rect = CGRectMake(0.0, 0.0, 0.5, 1.0); // half size
else 
  rect = CGRectMake(0.0, 0.0, 1.0, 1.0); // full size
imageLayer.contentsRect = rect;

This slices the image in half along width. masksToBounds takes care of clipping sublayers (in case you have them). You can tweak the contentsRect unit rectangle to adjust where you want the cutoff. You may also want to adjust the imageView's own bounds as well to match the size.

This has an added bonus in that adjusting the contentsRect is automatically animated so when you do the rotation the width animates in and out nicely.

// Set the layer contents
view.layer.contents = [image CGImage];
// Stretch so that contents overflows the edges and keeps aspect ratio
view.layer.contentsGravity = kCAGravityResizeAspectFill;
// Clip off the overflow
view.layer.masksToBounds = YES;
// Set the frame
CGRect frame;
frame.origin = CGPointZero;
frame.size = view.superview.bounds.size;
view.frame = frame;
// Make sure it resizes when the superview does
view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

You will have to work with view's layer.

You can find the appropriate guidelines at https://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/Layers.html

Hope this helps.

Thanks,
Jim.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM