Come implementare il mio zoom ma avere ancora accesso allo scorrimento di UIScrollView?

StackOverflow https://stackoverflow.com/questions/493219

  •  20-08-2019
  •  | 
  •  

Domanda

Vorrei utilizzare la funzionalità di scorrimento / panoramica di UIScrollView ma vorrei gestire tutto lo zoom e il ridimensionamento. Il mio piano attuale è di avere un viewController che possiede un UIView (lo chiamerò view1) con più UIVview e UIScrollViews da bambini.

È possibile per view1 gestire tutti gli eventi multi-touch (al fine di rendere manualmente tutti gli stati ingranditi dei suoi figli) e disegnare i risultati su ciascuna rispettiva vista di scorrimento per consentire a un utente di scorrere i risultati?

(Per i curiosi, l'applicazione sta disegnando più mappe di calore, ognuna con il proprio set di assi. Durante lo zoom o lo scorrimento, gli assi devono aggiornarsi per etichettare correttamente gli intervalli rappresentati nell'area dati (la vista di scorrimento). Il motivo per cui non riesco a utilizzare lo zoom di ridimensionamento dell'immagine di contesto predefinito fornito gratuitamente con scrollView è che QUALSIASI elemento disegnato sul contesto viene ingrandito (incluse cose come le linee di riferimento). L'azione di zoom non è di ingrandire le cose ma di regolare l'intervallo di dati visualizzabili.)

È stato utile?

Soluzione 2

Grazie per il tuo suggerimento Brad. la soluzione che ho finito per usare era estendere UIScrollView e sovrascrivere i tocchiMoved: withEvent: method with this:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    if ([[event touchesForView:self] count] == 1) 
         [super touchesMoved:touches withEvent:event];
    [content touchesMoved:touches withEvent:event];
}

dove " contenuto " è un puntatore al contenuto secondario del mio scrollview. Ho dovuto farlo in questo modo perché il mio contenuto ha bisogno di zoom-to-point (cioè, i punti nello spazio dati sotto le dita dell'utente non dovrebbero cambiare). Le informazioni inviate a setTransform: possono solo dirmi le dimensioni del frame di contenuto, ma ho anche bisogno dell'offset in esso.

Altri suggerimenti

Puoi infatti far sì che la vista di hosting principale intercetti eventi multitouch ed esegua il ridimensionamento delle UIVview sottostanti a livello di codice. È quello che faccio nella parte di visualizzazione OpenGL di la mia applicazione (fonte disponibile qui ). Puoi comunque passare gli eventi a tocco singolo alla vista di scorrimento sottostante per il panning, ecc.

Tuttavia, potrebbe esserci ancora un modo per fare ciò che descrivi senza intercettare gli eventi touch. UIScrollView esegue il ridimensionamento predefinito applicando una trasformazione alla visualizzazione del contenuto. In risposta a questa domanda , descrivo un modo per eseguire nuovamente il rendering della visualizzazione del contenuto su una nuova scala al termine dello zoom con pizzico. Ciò ti consentirebbe di aggiornare il disegno con linee di griglia nette una volta eseguito lo zoom.

Inoltre, se non stai realmente ridimensionando e vuoi cambiare un'altra proprietà della tua vista con lo zoom con pizzico, puoi fare ciò che descrivo in quella domanda e intercettare l'impostazione della trasformazione sul tuo contenuto Visualizza, solo don ' applicare la trasformazione. È possibile estrarre la scala che UIScrollView vuole impostare da quella trasformazione e rispondere in modo personalizzato alla vista.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top