public void WillAnimateCancel(UIDragInteraction interaction, UIDragItem item, IUIDragAnimating animator)
 {
     animator.AddAnimations(() =>
     {
         FadeItems(new UIDragItem[] { item }, 1f);
     });
 }
        /// <summary>
        /// Required for drag operations from a table
        /// </summary>
        public UIDragItem[] GetItemsForBeginningDragSession(UITableView tableView, IUIDragSession session, NSIndexPath indexPath)
        {
            var todo         = todoItems[indexPath.Row];
            var stringToDrop = todo.Name;

            if (todo.Done)
            {   // we can modify the data that is dragged
                stringToDrop += " [" + NSBundle.MainBundle.LocalizedString("Done", "") + "]";
            }
            var data = NSData.FromString(stringToDrop, NSStringEncoding.UTF8);

            var itemProvider = new NSItemProvider();

            itemProvider.RegisterDataRepresentation(UTType.PlainText,
                                                    NSItemProviderRepresentationVisibility.All,
                                                    (completion) =>
            {
                completion(data, null);
                return(null);
            });
            var dragItem = new UIDragItem(itemProvider);

            //dragItem.LocalObject = if your object is a subclass of NSObject
            return(new UIDragItem[] { dragItem });
        }
Пример #3
0
    public void OnEndDrag(PointerEventData eventData)
    {
        if (mTarget == null)
        {
            return;
        }
        GameObject go = eventData.pointerEnter;        //鼠标下的物体

        if (go == null)
        {
            return;
        }
        UIDragReceiver dr = go.GetComponentInParent <UIDragReceiver> ();//向上取解决UIDragReceiver被拦截的问题

        if (dr == null || dr.enabled == false || (dr.recvMask & mTarget.typeMask) == 0 || object.ReferenceEquals(mTarget.GetComponentInParent <UIDragReceiver> (), dr))
        {
            if (mFallback)
            {
                StartCoroutine(Fallback(mTarget.transform, mLocalBeginlPos));
            }
        }
        else
        {
            if (onDragReceived != null)
            {
                onDragReceived(mTarget, dr);
            }
            recoverDepth(mTarget.transform);
        }
        mTarget = null;
    }
Пример #4
0
        public UIDragItem[] GetItemsForBeginningDragSession(UITableView tableView, IUIDragSession session, NSIndexPath indexPath)
        {
            _sourceTableView = tableView;
            _sourceListView  = Element;

            _dragItem = (Item)((IList)Element.ItemsSource)[indexPath.Row];

            // https://forums.xamarin.com/discussion/66953/how-to-save-c-object-into-nsdata-and-get-the-same-object-from-nsdata
            //var data = NSKeyedArchiver.ArchivedDataWithRootObject(indexPath);

            //var data = NSData.FromString(placeName, NSStringEncoding.UTF8);
            var data = NSData.FromString(_dragItem.Id);

            var itemProvider = new NSItemProvider();

            itemProvider.RegisterDataRepresentation(UTType.PlainText, NSItemProviderRepresentationVisibility.All,
                                                    (completion) =>
            {
                completion(data, null);
                return(null);
            });

            var uidragItem = new UIDragItem(itemProvider);

            return(new[] { uidragItem });
        }
Пример #5
0
    public void OnBeginDrag(PointerEventData eventData)
    {
        GameObject go = eventData.pointerEnter;

        if (go == null)
        {
            return;
        }
        UIDragItem di = go.GetComponent <UIDragItem> ();

        if (di == null || di.enabled == false)
        {
            return;
        }
        mLocalBeginlPos = di.transform.localPosition;
        mTarget         = mClone ? GameObject.Instantiate <UIDragItem> (di) : di;
        if (mClone)
        {
            mTarget.transform.SetParent(di.transform.parent, false);
        }

        mTargetParent = mTarget.transform.parent as RectTransform;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(mTargetParent, eventData.position, eventData.pressEventCamera, out mLocalPointerPos);
        bringToTop();
    }
        // Helper method to obtain a drag item for the photo at the index path.
        UIDragItem DragItem(NSIndexPath indexPath)
        {
            var photo        = Photo(indexPath);
            var itemProvider = photo.ItemProvider;
            var dragItem     = new UIDragItem(itemProvider);

            dragItem.LocalObject = photo;
            return(dragItem);
        }
Пример #7
0
        public UIDragItem[] GetItemsForBeginningSession(UIDragInteraction interaction, IUIDragSession session)
        {
            bool isEven   = Convert.ToInt16(NumberLabel.Text) % 2 == 0;
            var  provider = new NSItemProvider(new NSString(NumberLabel.Text));
            var  item     = new UIDragItem(provider)
            {
                LocalObject = new NSNumber(isEven)
            };

            return(new UIDragItem[] { item });
        }
Пример #8
0
        UIDragItem[] DragItems(NSIndexPath forAlbumAt)
        {
            var album     = this.Album(forAlbumAt);
            var dragItems = album.Photos.Select((photo) => {
                var itemProvider         = photo.ItemProvider;
                var dragItem             = new UIDragItem(itemProvider);
                dragItem.LocalObject     = photo;
                dragItem.PreviewProvider = photo.PreviewProvider;
                return(dragItem);
            });

            return(dragItems.ToArray());
        }
Пример #9
0
    public void Init(UIDragItem uiDragItem)
    {
        items.Add(templateObj.GetComponent <UIItemShortcut>());
        while (items.Count < 3)
        {
            var obj = Instantiate(templateObj, transform);
            items.Add(obj.GetComponent <UIItemShortcut>());
        }

        for (int i = 0; i < items.Count; ++i)
        {
            items[i].Init(i, uiDragItem);
        }
    }
Пример #10
0
    public void Init(int index, UIDragItem uiDragItem, int equipmentIndex = -1)
    {
        selectBG       = transform.Find("SelectBG").GetComponent <Image>();
        selectBG.color = Color.clear;
        itemImage      = transform.Find("ItemImage").GetComponent <Image>();
        countText      = transform.Find("CountText").GetComponent <Text>();

        this.index          = index;
        this.uiDragItem     = uiDragItem;
        this.equipmentIndex = equipmentIndex;

        ItemInventry.Instance.OnChangedItemCount += UpdateUI;
        Load();
    }
        public UIDragItem [] GetItemsForBeginningDragSession(UICollectionView collectionView, IUIDragSession session, NSIndexPath indexPath)
        {
            var selectedPhoto = GetPhoto(indexPath);

            var userActivity = selectedPhoto.OpenDetailUserActivity();
            var itemProvider = new NSItemProvider(UIImage.FromFile(selectedPhoto.Name));

            itemProvider.RegisterObject(userActivity, NSItemProviderRepresentationVisibility.All);

            var dragItem = new UIDragItem(itemProvider)
            {
                LocalObject = selectedPhoto
            };

            return(new [] { dragItem });
        }
Пример #12
0
        public virtual UIDragItem[] GetItemsForBeginningSession(UIDragInteraction interaction, IUIDragSession session)
        {
            // no data needed since we directly have access to the view thanks to the OnTouched event
            // so we put stub data so that the provider doesn't provide null objects
            TouchesBegan(null, null);

            var provider = new NSItemProvider(new NSString(""));

            var item = new UIDragItem(provider)
            {
                LocalObject = new NSNumber(true)
            };

            return(new UIDragItem[] { item });

            //return new UIDragItem[] { new UIDragItem(default(NSItemProvider)) };
        }
Пример #13
0
        UIDragItem[] IUIDragInteractionDelegate.GetItemsForBeginningSession(UIDragInteraction interaction, IUIDragSession session)
        {
            var results = new List <UIDragItem>();

            foreach (QRDetectionResult qrCode in QRCodes)
            {
                var itemProvider = new NSItemProvider((NSString)qrCode.Message);
                itemProvider.RegisterObject(qrCode.CroppedImage, NSItemProviderRepresentationVisibility.All);
                var item = new UIDragItem(itemProvider)
                {
                    LocalObject = qrCode
                };
                results.Add(item);
            }

            return(results.ToArray());
        }
        public UIDragItem[] GetItemsForBeginningSession(UIDragInteraction interaction, IUIDragSession session)
        {
            var point = session.LocationInView(interaction.View);

            var index = ImageIndex(point);

            if (index >= 0)
            {
                var image        = Images[index];
                var itemProvider = new NSItemProvider(image);
                var dragItem     = new UIDragItem(itemProvider);

                dragItem.LocalObject = new NSNumber(index);

                return(new UIDragItem[] { dragItem });
            }
            return(new UIDragItem[0]);
        }
Пример #15
0
        /// <summary>
        /// 'GetItemsForBeginningSession' allows dragging from a view.
        /// </summary>
        public UIDragItem [] GetItemsForBeginningSession(UIDragInteraction interaction, IUIDragSession session)
        {
            var image = ImageView.Image;

            if (image == null)
            {
                return new UIDragItem [] { }
            }
            ;

            var provider = new NSItemProvider(image);
            var item     = new UIDragItem(provider)
            {
                LocalObject = image
            };

            // If a non empty array is returned, dragging is enabled.
            return(new UIDragItem [] { item });
        }
Пример #16
0
        private UITargetedDragPreview DragPreviewForItem(UIDragItem item)
        {
            var qrCode = item.LocalObject as QRDetectionResult;

            if (qrCode == null)
            {
                return(new UITargetedDragPreview(this));
            }
            var previewView = new UIImageView(qrCode.CroppedImage);

            previewView.Frame = ConvertRectToView(this.ConvertFromImageRect(qrCode.RectInOriginalImage), Window);

            var target     = new UIDragPreviewTarget(Window, previewView.Center);
            var parameters = new UIDragPreviewParameters()
            {
                VisiblePath = UIBezierPath.FromRoundedRect(previewView.Bounds, 20f)
            };

            return(new UITargetedDragPreview(previewView, parameters, target));
        }
Пример #17
0
        public void WillAnimateDrop(UIDropInteraction interaction, UIDragItem item, IUIDragAnimating animator)
        {
            animator.AddAnimations(() => {
                FadeItems(new UIDragItem[] { item }, 0f);
            });

            var movePoint = MovePoint; //DropPoint

            animator.AddCompletion((err) => {
                var index = item.LocalObject as NSNumber;
                if (index != null)
                {
                    var i = index.Int32Value;
                    if (i >= 0)
                    {
                        Views[i].Center = movePoint;
                        Views[i].Alpha  = 1f;
                    }
                }
            });
        }
Пример #18
0
 public UITargetedDragPreview GetPreviewForLiftingItem(UIDragInteraction interaction, UIDragItem item, IUIDragSession session)
 {
     return(DragPreviewForItem(item));
 }
        public UITargetedDragPreview GetPreviewForLiftingItem(UIDragInteraction interaction, UIDragItem item, IUIDragSession session)
        {
            var imageView = item.LocalObject as UIImageView;

            if (imageView == null)
            {
                return(null);
            }
            return(new UITargetedDragPreview(imageView));
        }
Пример #20
0
        public UITargetedDragPreview GetPreviewForLiftingItem(UIDragInteraction interaction, UIDragItem item, IUIDragSession session)
        {
            var imageView = new UIImageView(Image)
            {
                Frame         = this.Frame,
                ClipsToBounds = true,
                ContentMode   = UIViewContentMode.ScaleAspectFill
            };
            var target = new UIDragPreviewTarget(Superview, imageView.Center);

            return(new UITargetedDragPreview(imageView, new UIDragPreviewParameters(), target));
        }
Пример #21
0
        public UITargetedDragPreview GetPreviewForDroppingItem(UIDropInteraction interaction, UIDragItem item, UITargetedDragPreview defaultPreview)
        {
            var target = new UIDragPreviewTarget(this, IconView.Center, CGAffineTransform.Scale(new CGAffineTransform(), 0.1f, 0.1f));

            return(defaultPreview.GetRetargetedPreview(target));
        }
        public UITargetedDragPreview GetPreviewForLiftingItem(UIDragInteraction interaction, UIDragItem item, IUIDragSession session)
        {
            var index = item.LocalObject as NSNumber;
            var i     = index.Int32Value;

            return(new UITargetedDragPreview(Views[i]));
        }
Пример #23
0
 public UITargetedDragPreview GetPreviewForCancellingItem(UIDragInteraction interaction, UIDragItem item, UITargetedDragPreview defaultPreview)
 {
     return(DragPreviewForItem(item));
 }
Пример #24
0
        public UITargetedDragPreview GetPreviewForLiftingItem(UIDragInteraction interaction, UIDragItem item, IUIDragSession session)
        {
            var image = item.LocalObject as UIImage;

            if (image == null)
            {
                return(null);
            }

            CGRect frame;

            if (image.Size.Width > image.Size.Height)
            {
                var multiplier = ImageView.Frame.Width / image.Size.Width;
                frame = new CGRect(0, 0, ImageView.Frame.Width, ImageView.Frame.Height * multiplier);
            }
            else
            {
                var multiplier = ImageView.Frame.Height / image.Size.Height;
                frame = new CGRect(0, 0, ImageView.Frame.Width * multiplier, ImageView.Frame.Height);
            }

            var previewImageView = new UIImageView(image)
            {
                ContentMode = UIViewContentMode.ScaleAspectFit,
                Frame       = frame
            };

            var target = new UIDragPreviewTarget(ImageView, ImageView.Center);

            return(new UITargetedDragPreview(previewImageView, new UIDragPreviewParameters(), target));
        }
Пример #25
0
        public UIDragItem[] HandleDragStarting(View element, IPlatformViewHandler handler)
        {
            UIDragItem[] returnValue = null;
            SendEventArgs <DragGestureRecognizer>(rec =>
            {
                if (!rec.CanDrag)
                {
                    return;
                }

                var args = rec.SendDragStarting(element);

                if (args.Cancel)
                {
                    return;
                }

                if (!args.Handled)
                {
                    UIImage uIImage             = null;
                    string clipDescription      = String.Empty;
                    NSItemProvider itemProvider = null;

                    if (handler.PlatformView is UIImageView iv)
                    {
                        uIImage = iv.Image;
                    }

                    if (handler.PlatformView is UIButton b && b.ImageView != null)
                    {
                        uIImage = b.ImageView.Image;
                    }

                    if (uIImage != null)
                    {
                        if (uIImage != null)
                        {
                            itemProvider = new NSItemProvider(uIImage);
                        }
                        else
                        {
                            itemProvider = new NSItemProvider(new NSString(""));
                        }

                        if (args.Data.Image == null && handler.VirtualView is IImageElement imageElement)
                        {
                            args.Data.Image = imageElement.Source;
                        }
                    }
                    else
                    {
                        string text = args.Data.Text ?? clipDescription;

                        if (String.IsNullOrWhiteSpace(text))
                        {
                            itemProvider = new NSItemProvider(handler.PlatformView.ConvertToImage());
                        }
                        else
                        {
                            itemProvider = new NSItemProvider(new NSString(text));
                        }
                    }

                    var dragItem         = new UIDragItem(itemProvider);
                    dragItem.LocalObject = new CustomLocalStateData()
                    {
                        Handler     = handler,
                        View        = handler.VirtualView as View,
                        DataPackage = args.Data
                    };

                    returnValue = new UIDragItem[] { dragItem };
                }
            },
                                                  element);

            return(returnValue ?? new UIDragItem[0]);
        }
Пример #26
0
        public UIDragItem[] HandleDragStarting(View element, IVisualElementRenderer renderer)
        {
            UIDragItem[] returnValue = null;
            SendEventArgs <DragGestureRecognizer>(rec =>
            {
                if (!rec.CanDrag)
                {
                    return;
                }

                var args = rec.SendDragStarting(element);

                if (args.Cancel)
                {
                    return;
                }

                if (!args.Handled)
                {
                    UIImage uIImage             = null;
                    string clipDescription      = String.Empty;
                    NSItemProvider itemProvider = null;

                    if (renderer is IImageVisualElementRenderer iver)
                    {
                        uIImage = iver.GetImage()?.Image;
                        if (uIImage != null)
                        {
                            itemProvider = new NSItemProvider(uIImage);
                        }
                        else
                        {
                            itemProvider = new NSItemProvider(new NSString(""));
                        }

                        if (args.Data.Image == null && renderer.Element is IImageElement imageElement)
                        {
                            args.Data.Image = imageElement.Source;
                        }
                    }
                    else
                    {
                        string text = args.Data.Text ?? clipDescription;

                        if (String.IsNullOrWhiteSpace(text))
                        {
                            itemProvider = new NSItemProvider(renderer.NativeView.ConvertToImage());
                        }
                        else
                        {
                            itemProvider = new NSItemProvider(new NSString(text));
                        }
                    }

                    var dragItem         = new UIDragItem(itemProvider);
                    dragItem.LocalObject = new CustomLocalStateData()
                    {
                        Renderer    = renderer,
                        View        = renderer.Element as View,
                        DataPackage = args.Data
                    };

                    returnValue = new UIDragItem[] { dragItem };
                }
            },
                                                  element);

            return(returnValue ?? new UIDragItem[0]);
        }
Пример #27
0
 public void WillAnimateCancel(UIDragInteraction interaction, UIDragItem item, IUIDragAnimating animator)
 {
     animator.AddAnimations(() => {
         Alpha = 1f;
     });
 }
Пример #28
0
 public UITargetedDragPreview GetPreviewForDroppingItem(UIDropInteraction interaction, UIDragItem item, UITargetedDragPreview defaultPreview)
 {
     if (item.LocalObject == null)
     {
         return(null);
     }
     else
     {
         DropPoint = defaultPreview.View.Center;
         var target = new UIDragPreviewTarget(View, DropPoint); // HACK: why is this null?
         //return defaultPreview.GetRetargetedPreview(target);
         return(defaultPreview);
     }
 }