public override void DidUpdateFocus (UIFocusUpdateContext context, UIFocusAnimationCoordinator coordinator) { var nextFocusedView = context.NextFocusedView; if (!nextFocusedView.IsDescendantOfView (TableView)) return; NSIndexPath indexPath = ((UITableViewFocusUpdateContext)context).NextFocusedIndexPath; if (indexPath == null) return; // Cancel any previously queued segues. delayedSeguesOperationQueue.CancelAllOperations (); // Create an `NSBlockOperation` to perform the detail segue after a delay. var performSegueOperation = new NSBlockOperation (); var segueIdentifier = SegueIdentifierMap[indexPath.Section][indexPath.Row]; performSegueOperation.AddExecutionBlock (() => { NSThread.SleepFor (performSegueDelay); if (performSegueOperation.IsCancelled && segueIdentifier == lastPerformedSegueIdentifier) return; NSOperationQueue.MainQueue.AddOperation (() => { PerformSegue (segueIdentifier, nextFocusedView); lastPerformedSegueIdentifier = segueIdentifier; TableView.SelectRow (indexPath, true, UITableViewScrollPosition.None); }); }); delayedSeguesOperationQueue.AddOperation (performSegueOperation); }
public void ComposeCell(DataItemCollectionViewCell cell, DataItem dataItem) { var operationQueue = OperationQueueForCell(cell); operationQueue.CancelAllOperations(); cell.RepresentedDataItem = dataItem; cell.Label.Text = dataItem.Title; cell.ImageView.Alpha = 1f; cell.ImageView.Image = (UIImage)processedImageCache.ObjectForKey((NSString)dataItem.Identifier); if (cell.ImageView.Image != null) { return; } var processImageOperation = new NSBlockOperation(); processImageOperation.AddExecutionBlock(() => { if (processImageOperation.IsCancelled) { return; } UIImage image = null; DispatchQueue.MainQueue.DispatchSync(() => { image = ProcessImageNamed(dataItem.ImageName); }); if (image == null) { return; } processedImageCache.SetObjectforKey(image, (NSString)dataItem.Identifier); NSOperationQueue.MainQueue.AddOperation(() => { if (cell.RepresentedDataItem == null) { return; } cell.ImageView.Alpha = 0f; cell.ImageView.Image = image; UIView.Animate(0.25, () => cell.ImageView.Alpha = 1f); }); }); operationQueue.AddOperation(processImageOperation); }
public void ComposeCell (DataItemCollectionViewCell cell, DataItem dataItem) { var operationQueue = OperationQueueForCell (cell); operationQueue.CancelAllOperations (); cell.RepresentedDataItem = dataItem; cell.Label.Text = dataItem.Title; cell.ImageView.Alpha = 1f; cell.ImageView.Image = (UIImage)processedImageCache.ObjectForKey ((NSString)dataItem.Identifier); if (cell.ImageView.Image != null) return; var processImageOperation = new NSBlockOperation (); processImageOperation.AddExecutionBlock (() => { if (processImageOperation.IsCancelled) return; UIImage image = null; DispatchQueue.MainQueue.DispatchSync (() => { image = ProcessImageNamed (dataItem.ImageName); }); if (image == null) return; processedImageCache.SetObjectforKey (image, (NSString)dataItem.Identifier); NSOperationQueue.MainQueue.AddOperation (() => { if (cell.RepresentedDataItem == null) return; cell.ImageView.Alpha = 0f; cell.ImageView.Image = image; UIView.Animate (0.25, () => cell.ImageView.Alpha = 1f); }); }); operationQueue.AddOperation (processImageOperation); }
public override void DidUpdateFocus(UIFocusUpdateContext context, UIFocusAnimationCoordinator coordinator) { var nextFocusedView = context.NextFocusedView; if (!nextFocusedView.IsDescendantOfView(TableView)) { return; } NSIndexPath indexPath = ((UITableViewFocusUpdateContext)context).NextFocusedIndexPath; if (indexPath == null) { return; } // Cancel any previously queued segues. delayedSeguesOperationQueue.CancelAllOperations(); // Create an `NSBlockOperation` to perform the detail segue after a delay. var performSegueOperation = new NSBlockOperation(); var segueIdentifier = SegueIdentifierMap[indexPath.Section][indexPath.Row]; performSegueOperation.AddExecutionBlock(() => { NSThread.SleepFor(performSegueDelay); if (performSegueOperation.IsCancelled && segueIdentifier == lastPerformedSegueIdentifier) { return; } NSOperationQueue.MainQueue.AddOperation(() => { PerformSegue(segueIdentifier, nextFocusedView); lastPerformedSegueIdentifier = segueIdentifier; TableView.SelectRow(indexPath, true, UITableViewScrollPosition.None); }); }); delayedSeguesOperationQueue.AddOperation(performSegueOperation); }