我已将背景图像应用于我的ViewController:
ParentViewController.View.BackgroundColor = UIColor.FromPatternImage (image)
现在,当屏幕方向发生变化时,它会破坏我的整个背景,因为该图片保持不变。当然我可以在Photoshop中旋转图像并将其放入我的项目中,但我对软件工程师的骄傲感到反感。
我搜索了很多来源。我尝试过Objective-c样本。我在c#中只发现了一些。我没有时间学习UIKit和Core Graphics之间的差异。我试过了CGContext.RotateCTM
,我试图通过CGAffineTransform.MakeRotation
实现这一目标。它不起作用。我只需要做一件简单的事情。
显然在使用RotateCTM
或更改CGAffineTransform
之前,您必须以某种方式定义关键点。
请有人给我看一个简单的例子,它是如何运作的。
更新:
这是我到目前为止所得到的:
var image = new UIImage ("Images/background.jpg");
if (interfaceOrientation == UIInterfaceOrientation.LandscapeLeft) {
CGImage imageRef = image.CGImage;
var width = imageRef.Width;
var height = imageRef.Height;
CGImageAlphaInfo alphaInfo = imageRef.AlphaInfo;
CGColorSpace colorSpaceInfo = CGColorSpace.CreateDeviceRGB ();
CGBitmapContext bitmap =
new CGBitmapContext (IntPtr.Zero, width, height, imageRef.BitsPerComponent, imageRef.BytesPerRow, colorSpaceInfo, alphaInfo);
bitmap.TranslateCTM(0, imageRef.Height);
bitmap.RotateCTM((float)-1.5707f);
bitmap.DrawImage (new Rectangle (0, 0, height, width), imageRef);
image = UIImage.FromImage (bitmap.ToImage());
bitmap = null;
}
ParentViewController.View.BackgroundColor = UIColor.FromPatternImage (image);
正如你所看到的那样并不好,虽然它确实在旋转:
我错过了什么?
答案 0 :(得分:6)
将UIImageView
作为子视图添加到控制器的视图中,并将图像加载到该子视图中。
您可能需要将ContentMode
的{{1}}设置为UIImageView
以使其调整大小。
将ScaleFit
的{{1}}设置为AutoresizingMask
和UIImageView
,您应该获得所需的结果和轮换(只要您的控制器覆盖FlexibleWidth
)。< / p>
FlexibleHeight
编辑样本代码:
ShouldAutorotateToOrientation()
答案 1 :(得分:4)
这可能有资格使用FromPatternImage。在这种情况下,生成的“UIColor”不是视图,也不符合接收任何旋转事件的条件。因此,您可能能够计算边界变化,旋转图像,应用新计算的边界,重置WillRotateToInterfaceOrientation(...)内的BackgroundColor属性,但这非常复杂,甚至无法实现远程性能。
在我看来,更合理的方法是简单地创建一个UIImageView并将其放在层次结构中的其他所有内容之下:
var imageView = new UIImageView(UIImage.FromFile("Images/background.png"));
imageView.Frame = new RectangleF(...) // set appropriate frame here
imageView.AutoResizingMask = ...; // set appropriate mask here
ParentViewController.View.AddSubView(imageView);
ParentViewController.View.SendSubviewToBack(imageView);
这允许系统对其设计的内容承担责任,并使您不必编写昂贵的旋转代码,同时实现所需的效果。
答案 2 :(得分:2)
对于一张图片来说可能有些过分,但对于轮换我一直在使用它......
https://github.com/escoz/monotouch-controls/blob/master/UICatalog/RotatingViewController.cs