Need help about contentMode and autoresizingMask o

2019-04-07 03:22发布

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

alt text

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

alt text

4条回答
放我归山
2楼-- · 2019-04-07 03:30

Use an UIImageView with these settings:

imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                              UIViewAutoresizingFlexibleHeight);

imageView.contentMode = UIViewContentModeScaleAspectFit;
查看更多
forever°为你锁心
3楼-- · 2019-04-07 03:44
// 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;
查看更多
聊天终结者
4楼-- · 2019-04-07 03:44

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.

查看更多
仙女界的扛把子
5楼-- · 2019-04-07 03:47

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.

查看更多
登录 后发表回答