質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

1480閲覧

iOSのアプリでグラデーションのかかった直線を引きたいです

monblanck

総合スコア13

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2017/10/05 12:21

現在Xamarin FormsのPCL環境でiOSアプリを開発しています。

グラデーションのかかった直線の描画をしたいと思って、色々調べているのですがいまいち解りません。

描画方法をご教授いただけますと助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

直線は細長い四角形で実現したいと思います。その四角形を
CoreGraphics.CGContext.DrawLinearGradient Method を使ってグラデーションで塗ることにします。

Creating Mobile Apps with Xamarin.Forms」の「Chapter 27. Custom renderers」を参考に、 View のカスタムレンダラーを作って、Draw をオーバーライドします。色を指定できるようにプロパティ Color1 と Color2 を作ってみました。

DrawLinearGradientView.cs

C#

1using Xamarin.Forms; 2 3namespace DrawLinearGradientTest 4{ 5 public class DrawLinearGradientView : View 6 { 7 public Color Color1 { get; set; } 8 public Color Color2 { get; set; } 9 } 10}

DrawLinearGradientViewRenderer.cs

C#

1using CoreGraphics; 2using DrawLinearGradientTest; 3using DrawLinearGradientTest.iOS; 4using UIKit; 5using Xamarin.Forms; 6using Xamarin.Forms.Platform.iOS; 7 8[assembly: ExportRenderer(typeof(DrawLinearGradientView), typeof(DrawLinearGradientViewRenderer))] 9namespace DrawLinearGradientTest.iOS 10{ 11 public class DrawLinearGradientViewRenderer : ViewRenderer<DrawLinearGradientView, UIView> 12 { 13 public CGColor Color1 { get; set; } 14 public CGColor Color2 { get; set; } 15 16 protected override void OnElementChanged(ElementChangedEventArgs<DrawLinearGradientView> e) 17 { 18 base.OnElementChanged(e); 19 20 Color1 = Element.Color1.ToCGColor(); 21 Color2 = Element.Color2.ToCGColor(); 22 } 23 24 public override void Draw(CGRect rect) 25 { 26 base.Draw(rect); 27 28 using (var context = UIGraphics.GetCurrentContext()) 29 { 30 context.DrawLinearGradient( 31 new CGGradient(CGColorSpace.CreateDeviceRGB(), new [] { Color1, Color2 }), 32 new CGPoint(0, 0), 33 new CGPoint(rect.Width, rect.Height), 34 CGGradientDrawingOptions.None 35 ); 36 } 37 } 38 } 39}

MainPage.xaml

XML

1<?xml version="1.0" encoding="utf-8" ?> 2<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 3 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 4 xmlns:local="clr-namespace:DrawLinearGradientTest;assembly=DrawLinearGradientTest" 5 x:Class="DrawLinearGradientTest.MainPage"> 6 <ContentPage.Content> 7 <AbsoluteLayout> 8 <local:DrawLinearGradientView 9 AbsoluteLayout.LayoutBounds="0.5,0.5,200,2" AbsoluteLayout.LayoutFlags="PositionProportional" 10 Color1="#ff0000" Color2="#00ff00"/> 11 <local:DrawLinearGradientView 12 AbsoluteLayout.LayoutBounds="0.5,0.5,200,2" AbsoluteLayout.LayoutFlags="PositionProportional" 13 TranslationX="50" TranslationY="-86.6" Rotation="60" 14 Color1="#0000ff" Color2="#00ff00"/> 15 <local:DrawLinearGradientView 16 AbsoluteLayout.LayoutBounds="0.5,0.5,200,2" AbsoluteLayout.LayoutFlags="PositionProportional" 17 TranslationX="-50" TranslationY="-86.6" Rotation="-60" 18 Color1="#ff0000" Color2="#0000ff"/> 19 </AbsoluteLayout> 20 </ContentPage.Content> 21</ContentPage>

スクリーンショット

投稿2017/10/11 05:39

NakamuraYoichi

総合スコア374

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

monblanck

2017/10/18 02:26

ありがとうございます。 ソースまでありがとうございます。参考にしてやってみたいともいます。 できそうな気がしてきました。 また何かありましたらお願いいたします。 お礼が遅くなりすみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問