ios - Image Scalling with multiple UICollectionView -
i building tvos app. have uitableview
has around 25-30 sections. each section has 1 row , in each row have 1 horizontal uicollectionview
has 1 section many rows. in each row in uicollectionview
have image view scale when uicollectionviewcell
selected.
i know can adjustsimagewhenancestorfocused
case little more complicated. have 2 imageviews in uicollectionviewcell
using adjustsimagewhenancestorfocused
on bigger imageview if use on smaller imageview bad. that's why have use scaling on smaller imageview.
the issue facing when somewhere uicollectionviewcell
indexpath messing up, results when go new uicollectionviewcell
smaller image scaled , becomes bigger , bigger , cells very big because of on scaling
here image storyboard setup
here code great.
func collectionview(collectionview: uicollectionview, didupdatefocusincontext context: uicollectionviewfocusupdatecontext, withanimationcoordinator coordinator: uifocusanimationcoordinator) { guard let nextindexpath = context.nextfocusedindexpath else{ return } guard let nextfocusedcell = collectionview.cellforitematindexpath(nextindexpath) as? mycollectionviewcell else{ return } if nextfocusedcell.teacherimageview != nil { coordinator.addcoordinatedanimations({ () -> void in let focusedtransform = cgaffinetransformscale(nextfocusedcell.teacherimageview.transform, 1.4, 1.4) nextfocusedcell.teacherimageview.transform = focusedtransform }, completion: nil ) } guard let previousindexpath = context.previouslyfocusedindexpath else { return } guard let prevfocusedcell = collectionview.cellforitematindexpath(previousindexpath) as? mycollectionviewcell else{ return } if prevfocusedcell.teacherimageview != nil { coordinator.addcoordinatedanimations({ () -> void in let focusedtransform = cgaffinetransformscale(prevfocusedcell.teacherimageview.transform, 1/1.4, 1/1.4) prevfocusedcell.teacherimageview.transform = focusedtransform }, completion: nil ) } }
i figured out solution problem. there multiple uicollecetionviews
in setup in each section of uitableview
. function
func collectionview(collectionview: uicollectionview, didupdatefocusincontext context: uicollectionviewfocusupdatecontext, withanimationcoordinator coordinator: uifocusanimationcoordinator)
is called multiple times when move vertically means when move between different rows of in image, , in case both cell @ indexpaths context.nextfocusedindexpath
, context.previouslyfocusedindexpath
not valid, 1 of them valid , other nil
can't return if 1 of them nil
have check both of them.
similary when move horizontially in 1 row or more precisely in 1 uitableview
section in case
func collectionview(collectionview: uicollectionview, didupdatefocusincontext context: uicollectionviewfocusupdatecontext, withanimationcoordinator coordinator: uifocusanimationcoordinator)
is called once , both context.nextfocusedindexpath
, context.previouslyfocusedindexpath
valid, have change cgaffinetransform
on both of them.
here updated code can further improved.
func collectionview(collectionview: uicollectionview, didupdatefocusincontext context: uicollectionviewfocusupdatecontext, withanimationcoordinator coordinator: uifocusanimationcoordinator) { let nextindexpath = context.nextfocusedindexpath if let nextip = nextindexpath { let nextfocusedcell = collectionview.cellforitematindexpath(nextip) as? mycollectionviewcell if let nextcell = nextfocusedcell { if nextcell.teacherimageview != nil { coordinator.addcoordinatedanimations({ () -> void in let focusedtransform = cgaffinetransformscale(nextcell.teacherimageview.transform, 1.4, 1.4) nextcell.teacherimageview.transform = focusedtransform }, completion: nil ) } } } let previousindexpath = context.previouslyfocusedindexpath if let previp = previousindexpath { let previousfocusedcell = collectionview.cellforitematindexpath(previp) as? mycollectionviewcell if let previouscell = previousfocusedcell { if previouscell.teacherimageview != nil { coordinator.addcoordinatedanimations({ () -> void in let focusedtransform = cgaffinetransformscale(previouscell.teacherimageview.transform, 1/1.4, 1/1.4) previouscell.teacherimageview.transform = focusedtransform }, completion: nil ) } } } }
Comments
Post a Comment