Objective c 如何在iPad上制作类似AppStore的按钮
我似乎不知道该怎么做这门课 我想要的是一些不是圆形矩形按钮的按钮 例如,iPad应用商店具有搜索控件,该控件模仿从web选择框或Windows下拉列表中已知的下拉列表 我如何创建一个看起来更像uibarbuttonite而不是RoundRect UIButton的按钮,并且仍然能够将其放置在任何地方 我在MonoTouch中工作,但答案可以是任何形式的,如何通过界面生成器或objective-c或MonoTouch编程实现,甚至只是一个伪描述——我只是希望得到一个提示 希望有人能指引我正确的方向Objective c 如何在iPad上制作类似AppStore的按钮,objective-c,interface-builder,xamarin.ios,ipad,Objective C,Interface Builder,Xamarin.ios,Ipad,我似乎不知道该怎么做这门课 我想要的是一些不是圆形矩形按钮的按钮 例如,iPad应用商店具有搜索控件,该控件模仿从web选择框或Windows下拉列表中已知的下拉列表 我如何创建一个看起来更像uibarbuttonite而不是RoundRect UIButton的按钮,并且仍然能够将其放置在任何地方 我在MonoTouch中工作,但答案可以是任何形式的,如何通过界面生成器或objective-c或MonoTouch编程实现,甚至只是一个伪描述——我只是希望得到一个提示 希望有人能指引我正确的方
/Anders网站上有一些自定义控件,您可以根据自己的需要使用,例如复制应用商店的“立即购买”按钮。只需创建一个自定义按钮即可。下面是一个使用
UIView
和CALayer
的一些功能创建真正丑陋的自定义按钮的示例
var btn = UIButton.FromType(UIButtonType.Custom);
btn.Frame = new RectangleF(100, 100, 150, 30);
btn.SetTitle("Button", UIControlState.Normal);
// Custom backround image.
btn.SetBackgroundImage(UIImage.FromFile("./images/barbuttonbackground.png"), UIControlState.Normal);
// Custom border color.
btn.Layer.BorderColor = UIColor.Orange.CGColor;
// Custom border width.
btn.Layer.BorderWidth = 2.0f;
// Custom rounded corners (does not really work well together with the background image).
btn.Layer.CornerRadius = 10.0f;
// Transparency.
btn.Alpha = 0.6f;
window.AddSubview(btn);
根据你的需要调整它。如果你想让你的按钮看起来不一样,那就去吧。这是我目前在MonoTouch中的示例。 由于我没有使用颜色,我已经注释掉了colorlayer的部分,但保留了它作为参考
public static UIButton GetNewButton(RectangleF frame)
{
var btn = UIButton.FromType(UIButtonType.Custom);
btn.Frame = frame;
btn.Layer.BorderWidth = 1.0f;
btn.Layer.BorderColor = UIColor.FromRGB(200,200,200).CGColor;
btn.Layer.CornerRadius = 4.0f;
btn.SetTitleColor(UIColor.Black, UIControlState.Normal);
btn.TitleLabel.TextAlignment = UITextAlignment.Right;
btn.TitleLabel.BackgroundColor = UIColor.Clear;
btn.Layer.NeedsDisplayOnBoundsChange = true;
SetupLayers(btn);
return btn;
}
private static void SetupLayers(UIButton btn){
CAGradientLayer bevelLayer = new CAGradientLayer();
bevelLayer.Frame = new RectangleF(new PointF(0,0), btn.Frame.Size);
bevelLayer.Colors = new CGColor[]{UIColor.White.CGColor, UIColor.FromRGB(218,218,218).CGColor};
bevelLayer.CornerRadius = 4.0f;
bevelLayer.NeedsDisplayOnBoundsChange = true;
/* CALayer colorLayer = new CALayer();
colorLayer.Frame = new RectangleF(0f,1f, btn.Frame.Width, btn.Frame.Height -2);
colorLayer.BorderColor = UIColor.FromWhiteAlpha(0, 0.1f).CGColor;
colorLayer.BackgroundColor = UIColor.FromRGBA(0.220f, 0.357f, 0.608f, 1).CGColor;
colorLayer.BorderWidth = 1.0f;
colorLayer.CornerRadius = 4.0f;
colorLayer.NeedsDisplayOnBoundsChange = true;
*/
CAGradientLayer colorGradient = new CAGradientLayer();
colorGradient.Frame = new RectangleF(0f,1f, btn.Frame.Width, btn.Frame.Height -2);
colorGradient.Colors = new CGColor[]{UIColor.FromWhiteAlpha(1f, 0.1f).CGColor, UIColor.FromWhiteAlpha(0.2f, 0.1f).CGColor/*, null*/};
colorGradient.Locations = new NSNumber[]{NSNumber.FromFloat(0.0f), NSNumber.FromFloat(1.0f)};
colorGradient.CornerRadius = 4.0f;
colorGradient.NeedsDisplayOnBoundsChange = true;
btn.Layer.AddSublayer(bevelLayer);
// btn.Layer.AddSublayer(colorLayer);
btn.Layer.AddSublayer(colorGradient);
btn.BringSubviewToFront(btn.TitleLabel);
}
好的,这里的总体思路是创建一个具有我想要的渐变和/或光泽光晕的背景图像,然后设置其余的属性。这看起来很有趣-我不是在寻找动画,而是在我的例子中更像popover/dropdown的功能。但我喜欢“完全没有图像”的方法。今天晚些时候我将对此进行研究。我将把这作为一个答案,因为这似乎完全符合我的目的。它以渐变等方式呈现按钮。我在写作时发布了我如何使用它的示例。我再一次被没有足够的重复所困扰。。我可以先发布我的代码作为“答案”8小时后发布。。。所以稍后我的MonoTouch实现将到达该站点。。。