escanear encuentro donde codigo iphone objective-c uiview uiscrollview scroll

encuentro - escanear codigo qr iphone 4s



Barra de desplazamiento personalizada para UIView de iPhone(hacer largos rollos no chupar) (4)

Intente usar un UIPanGestureRecognizer . En su acción, puede usar locationInView para determinar el punto que el usuario está tocando. Haga esto cuando el estado sea UIGestureRecognizerStateBegan y si está lo suficientemente cerca del lado de la vista, implemente el desplazamiento rápido. De lo contrario, implemente el desplazamiento lento.

En una publicación, Haciendo rollos largos en el iPhone no apesta , Aza Raskin describe un control alternativo de la barra de desplazamiento que es mejor para moverse en páginas muy largas:

No es importante que la barra de desplazamiento "permanezca por cierto tiempo" para activarla; Estoy bien simplemente deslizando el dedo por el borde derecho de la pantalla del iPhone para agarrar el asa de la barra de desplazamiento. La idea es que si arrastro el control 3/4 hacia abajo en la pantalla física, estaría 3/4 del camino hacia abajo en la página.

La aplicación para iPhone de Dropbox (¡es genial, por cierto!) Tiene exactamente este tipo de barra de desplazamiento para documentos PDF largos. El desplazamiento regular se realiza arrastrando a cualquier lugar que no sea el controlador; Al arrastrar el controlador, se mueve la vista a esa ubicación. Esto parece haberse implementado "desde cero", ya que no creo que el SDK sea lo suficientemente flexible como para personalizar el comportamiento de la barra de desplazamiento existente.

Sin embargo, Dropbox usa los visores de documentos nativos para mostrar documentos en el iPhone, por lo que de alguna manera le agregan la funcionalidad de la barra de desplazamiento. Ver el mango de la barra de desplazamiento? Puede arrastrar eso para obtener rápidamente otro lugar en el documento.

Este concepto es muy similar a cómo funcionan las barras de índice en UITableView (es decir, Contacts.app); el índice aparece como una barra en el lado derecho de la tabla (por ejemplo, "a" a "z"), y puede tocar una etiqueta en particular para saltar a la sección de destino. En este caso, sin embargo, una página muy larga no tiene secciones, y debería funcionar para el desplazamiento de propósito general, sin saltar a las secciones.

Entonces, ¿cómo puedo implementar este método de desplazamiento? Estoy buscando ideas generales y detalles de implementación específicos. También me interesa si existe una implementación de código abierto (esto parece un problema / solución de propósito general).


No conozco ninguna solución específica para iPhone, pero este es un tema viejo y bien recorrido en el mundo del desarrollo de Flash ... y probablemente puedas extraer una tonelada de pseudo código de ese reino.

Si conoce el alto de su ventana, y la altura de su contenido, y el desplazamiento actual del contenido (que lo hace), entonces tiene todas las herramientas que necesita para crear una UIView personalizada que puede servir como una respuesta táctil control deslizante. Y luego simplemente pinte sobre el desplazamiento predeterminado.


Probablemente haya una implementación de código abierto para esto. No sé ninguno. Tal vez disparar un correo electrónico a los desarrolladores de Dropbox?

De todos modos, la forma en que haría esto es:

@interface UICustomisedScrollView : UISCrollView { BOOL showingScroller; UIView scroller; //Customise this, either in IB or in viewDidLoad } @implementation UICustomisedScrollView - (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view { showingScroller = !showingScroller; if(showingScroller) scroller.hidden = NO; else scroller.hidden = YES; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if(showingScroller) { if(/*the touch is on the scroller*/) { /* scrollview.setContentOffset(...) we want to scroll according to how much the user scrolls here */ } //move scroller.frame.origin to where the touch is. } }

Supongo que no será demasiado difícil ... Pero aún no he probado el código anterior. Esa es la idea general de todos modos =)


Una idea general:

Agarré la aplicación Dropbox (es increíble) y jugué un poco. Parece que la visualización de PDF requiere un poco de la aplicación de fotos, ya que muestra de forma condicional una barra de navegación translúcida y barra de herramientas en toques, además de admitir la barra de desplazamiento. Estoy bastante seguro de que lo que está pasando es que tienen un controlador de vista personalizado interceptando toques y reaccionando en consecuencia.

En un toque:

  1. Si se trata de un toque, mostrar / ocultar la barra de navegación y la barra de herramientas.
  2. Si está en el depurador, comienza a rastrear el toque y desplaza la vista de desplazamiento / vista web (lo que sea que estén mostrando). Estoy seguro de que el desplazamiento es algo simple como scrollView.contentOffset = CGPointMake(0, (scrubber.y / [UIScreen mainScreen].bounds.size.height) * scrollView.contentSize.height) . 3)
  3. De lo contrario, pase el toque a la vista adjunta.

Puede haber otra magia oculta con visualización de PDF (nunca lo he hecho con toque de cacao) pero algo me dice que este es su proceso básico.