2016-04-06 15 views
0

私は、PlatformEffectを添付するのに問題があると思います。それは解決していますが、添付していないようです。ここPlatformEffectはEffectTestLib.iOSという名前のiOSライブラリプロジェクトである:だからPlatformEffectに添付できませんでしたか?

using System; 
using Xamarin.Forms; 
using Xamarin.Forms.Platform.iOS; 

[assembly: ResolutionGroupName ("MyCompany")] 
[assembly: ExportEffect (typeof (EffectTestLib.iOS.MyEffect), "MyEffect")] 
namespace EffectTestLib.iOS { 

    public class MyEffect : PlatformEffect { 

     protected override void OnAttached() { 
      System.Diagnostics.Debug.WriteLine ("Effect Attached"); 
      throw new NotImplementedException(); 
     } 

     protected override void OnDetached() { 
      throw new NotImplementedException(); 
     } 

     protected override void OnElementPropertyChanged (System.ComponentModel.PropertyChangedEventArgs args) { 
      base.OnElementPropertyChanged (args); 
     } 
    } 
} 

、それが接続されている場合、それは出力「効果は添付」とNotImplementedExceptionをスローする必要があります。私はそれが解決されていることを確認するために、アプリケーションの出力にPlatformEffectを書いています

using Xamarin.Forms; 

namespace EffectTest { 
    public class App : Application { 
     public App() { 
      MainPage = new ContentPage { 
       Content = new StackLayout { 
        VerticalOptions = LayoutOptions.Center, 
        Children = { 
         new Label { 
          XAlign = TextAlignment.Center, 
          Text = "Welcome to Xamarin Forms!" 
         } 
        } 
       } 
      }; 
      var effect = Effect.Resolve ("MyCompany.MyEffect"); 
      System.Diagnostics.Debug.WriteLine ("effect=[{0}]",effect); 
      MainPage.Effects.Add(effect); 
     } 
    } 
} 

注意:ここで

このPlatformEffectを使用するアプリケーションのためのPCLコードです。解決できない場合は、effect=[Xamarin.Forms.NullEffect]が表示されます。

アプリケーションiOSプラットフォームのコードは次のとおりです。 using System; using System.Collections.Generic; using System.Linq; Foundationを使用している ; UIKitを使用します。

namespace EffectTest.iOS 
{ 
    [Register ("AppDelegate")] 
    public partial class AppDelegate :  global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate 
    { 
     public override bool FinishedLaunching (UIApplication app, NSDictionary options) 
     { 
      global::Xamarin.Forms.Forms.Init(); 
      new EffectTestLib.iOS.MyEffect(); 

      LoadApplication (new App()); 

      return base.FinishedLaunching (app, options); 
     } 
    } 
} 

私のライブラリがロードされていることを確認するには、new EffectTestLib.iOS.MyEffect();に電話しています。

また、iOSプラットフォームプロジェクトにはEffectTestLib.iOSライブラリへの参照が含まれています。

私はアプリケーションを実行するときに、これは何が起こるかです:だから

2016-04-06 10:17:18.342 EffectTest.iOS[26578:8696061] effect=[EffectTestLib.iOS.MyEffect] 

、PlatformEffectが正しく解決されます。ただし、 "Attach Attached"も出力されず、NotImplementedExceptionもスローされません。また、MainPageのプロパティを変更すると、MyEffect.OnPropertyChangedは呼び出されません。バックhttps://developer.xamarin.com/guides/xamarin-forms/effects/creating/への参照

、私が表示されます。

  1. がにResolutionGroupName属性を追加するOnDetached方法
  2. を上書きOnAttached方法
  3. をオーバーライドPlatformEffectクラスのサブクラス
  4. を作成しますエフェクトクラス。
  5. エフェクトクラスにExportEffect属性を追加します。

https://developer.xamarin.com/guides/xamarin-forms/effects/creating/#Consuming_the_Effect_in_Cに戻って、ページエフェクトコレクションにエフェクトを追加しているようです。

私はここで間違っていますか?

+0

ソースコード:https://github.com/baskren/PlatformEffect_issue – baskren

+0

サケットへの私の応答を繰り返すが、PlatformEffectsは、Androidでなく、iOS版でページ要素に作業を行うことが表示されます。私はこれを説明するために[githubサンプルプロジェクト](https://github.com/baskren/PlatformEffect_issue)を更新しました。 – baskren

答えて

0

私はあなたのプロジェクトを見て、それが機能するようにコードを修正しました。 メインページでは呼び出されません。 ビューは動作しません。詳細を見つける)。 このようにしてみてください。

using Xamarin.Forms; 

namespace EffectTest { 
    public class App : Application { 
     public App() { 
      var label = new Label(); 
      label.Effects.Add (Effect.Resolve ("MyCompany.EffectCheck")); 
      MainPage = new RootPage(); 
      var effect = Effect.Resolve ("MyCompany.EffectCheck"); 
      System.Diagnostics.Debug.WriteLine ("effect=[{0}]",effect); 
      //MainPage.Effects.Add(Effect.Resolve ("MyCompany.EffectCheck")); 
     } 

     protected override void OnStart() { 
     } 

     protected override void OnSleep() { 
     } 

     protected override void OnResume() { 
     } 
    } 
} 

using Xamarin.Forms; 

namespace EffectTest 
{ 
    public class RootPage:ContentPage 
    { 
     public RootPage() 
     { 
      Content = new StackLayout() { 
       Children = { 
        new Label() 
       } 
      }; 
// this.Effects.Add(Effect.Resolve ("MyCompany.EffectCheck")); will not work 
        Content.Effects.Add(Effect.Resolve ("MyCompany.EffectCheck")); // it will work; 
     } 
    } 

} 
+1

これを見ていただきありがとうございます。 PlatformEffectsはAndroidのページ要素では動作しますが、iOSでは動作しないようです。私はこれを表示するために[このサンプルgithubプロジェクト](https://github.com/baskren/PlatformEffect_issue)を更新しました。 – baskren

関連する問題