Не могу установить CATiledLayer.FadeDuration в MonoTouch - PullRequest
0 голосов
/ 30 ноября 2010

Я пытаюсь удалить исчезающую анимацию из CATiledLayer.

Установка CATiledLayer.FadeDuration статическое свойство не работает и не должно, согласно этому закрытому отчету об ошибке: https://bugzilla.novell.com/show_bug.cgi?id=648993

Предлагаемое решение в Objective-C заключается в создании подкласса CATiledLayer: Как изменить iphone CATiledLayer fadeDuration? . Я реализовал это в MonoTouch, но в представлении ничего не рисуется, хотя DrawInContext вызывается, как и ожидалось.

Полный код для воспроизведения проблемы приведен ниже. Как только убираю [Export("fadeDuration")] все работает (но с анимацией).

Заранее спасибо за любую помощь.

using System;
using System.Drawing;
using MonoTouch.CoreAnimation;
using MonoTouch.UIKit;
using MonoTouch.Foundation;
using MonoTouch.ObjCRuntime;

[Register("NoFadeTiledLayer")]
public class NoFadeTiledLayer : CATiledLayer {

 public NoFadeTiledLayer () : base() {}
 public NoFadeTiledLayer (IntPtr handle) : base(handle) {}

 public override void DrawInContext (MonoTouch.CoreGraphics.CGContext ctx) {
   // This is being called everytime
   base.DrawInContext (ctx); 
 }

 [Export("fadeDuration")]
 public static new double FadeDuration () {
  return 0;
 }
}

public class ContentView : UIView {

 [Export("layerClass")]
 public static Class LayerClass () {
  return new Class (typeof(NoFadeTiledLayer));
 }

 public override void Draw (RectangleF rect) {
  DrawString ("Lorem ipsum", rect, UIFont.SystemFontOfSize (15));
 }
}


[Register("AppDelegate")]
public class AppDelegate : UIApplicationDelegate {

 static void Main (string[] args) {
  UIApplication.Main (args, null, "AppDelegate");
 }

 public override bool FinishedLaunching (UIApplication app, NSDictionary options) {
  var window = new UIWindow (UIScreen.MainScreen.ApplicationFrame);
  window.BackgroundColor = UIColor.Green;
  var view = new ContentView ();
  view.BackgroundColor = UIColor.White;
  view.Frame = window.Bounds;
  window.AddSubview (view);
  window.MakeKeyAndVisible ();

  return true;
 }
}

1 Ответ

2 голосов
/ 27 января 2011

Вы не сохраняете ссылку на свое окно UIWindow, то есть оно может быть собрано и выпущено.

Я переписал ваш класс следующим образом:

using System;
using System.Drawing;
using MonoTouch.CoreAnimation;
using MonoTouch.UIKit;
using MonoTouch.Foundation;
using MonoTouch.ObjCRuntime;

namespace FadeTest
{
    [Register("NoFadeTiledLayer")]
    public class NoFadeTiledLayer : CATiledLayer
    {

        public NoFadeTiledLayer () : base()
        {
        }

        public NoFadeTiledLayer (IntPtr handle) : base(handle)
        {
        }

        public override void DrawInContext (MonoTouch.CoreGraphics.CGContext ctx)
        {
            // This is being called everytime
            base.DrawInContext (ctx); 
        }

        [Export("fadeDuration")]
        public static new double FadeDuration
        {
            get
            {
                return 0;
            }
        }
    }

    public class ContentView : UIView
    {

        [Export("layerClass")]
        public static Class LayerClass ()
        {
            return new Class (typeof(NoFadeTiledLayer));
        }

        public override void Draw (RectangleF rect)
        {
            DrawString ("Lorem ipsum", rect, UIFont.SystemFontOfSize (15));
        }
    }

    public partial class AppDelegate : UIApplicationDelegate
    {
        static void Main (string[] args)
        {
            UIApplication.Main (args, null, "AppDelegate");
        }

        public override bool FinishedLaunching (UIApplication app, NSDictionary options)
        {
            window = new UIWindow (UIScreen.MainScreen.ApplicationFrame);
            window.BackgroundColor = UIColor.Green;
            var view = new ContentView ();
            view.BackgroundColor = UIColor.White;
            view.Frame = window.Bounds;
            window.AddSubview (view);
            window.MakeKeyAndVisible ();

            return true;
        }
    }
}

и поместил его в значение по умолчаниюшаблон проекта для оконного проекта, и он работал как положено.

...