Podążyłem za bardzo pomocnym samouczkiem na temat dodawania przeciągania podobnego do igły (http://guti.in/articles/creating-tinder-like-animations/); jednak mam jeden problem - gdy obraz odchodzi, chcę go zastąpić innym obrazem. Jak/gdzie mam to zrobić?Animacja z napisem "Tinder-Like Swipe" dla iOS
Odpowiedz
Zbudowałem prostszy i bardziej kompleksowy projekt oparty na tym samouczku. W szczególności można użyć tablicy obrazów i przypisać każdej karcie obraz oparty na indeksie obrazu. Czy obrazy będą dynamiczne lub statyczne?
nie może pomóc w tym momencie, ale tutaj jest to w każdym razie: https://github.com/cwRichardKim/TinderSimpleSwipeCards
ta odpowiedź opiera się na kodzie/odpowiedzi od cwRichardKim (dziękuję cwRichardKim!). nie znalazłem przewodnika, jak dodawać zdjęcia do każdej karty. wklejenie mojego podejścia poniżej (w tym examlple, obraz zakodowany url ciężko, ale w prawdziwej aplikacji można uzyskać URL obrazu z chmurą):
w DraggableView.h:
@property (nonatomic,strong)UIImageView* photoImageView; //%%% a placeholder for member photo to place on card
w DraggableView.m:
...
@synthesize photoImageView;
...
// - (id)initWithFrame:(CGRect)frame ...
// add photo to card
//You need to specify the frame of the view
UIView *photoView = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.frame.size.width,self.frame.size.width)];
photoImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"place_holder_image.png"]];
// UIImageView *imageView = [[UIImageView alloc] initWithImage:photo];
//specify the frame of the imageView in the superview , here it will fill the superview
photoImageView.frame = photoView.bounds;
// add the imageview to the superview
[photoView addSubview:photoImageView];
//add the view to the main view
[self addSubview:photoView];
w DraggableViewBackground.h:
@property(retain,nonatomic)NSArray* exampleCardUrls;
w DraggableViewBackground.m:
...
@synthesize exampleCardUrls;
...
exampleCardUrls = [[NSArray alloc]initWithObjects:@"http://images.clipartpanda.com/clipart-people-nTBX8zkgc.jpeg",@"http://epilepsyu.com/wp-content/uploads/2014/01/happy-people.jpg",@"http://alivecampus.com/wp-content/uploads/2014/09/people-02.jpg",@"https://www.google.com/images/srpr/logo11w.png",@"http://modalpoint.com/wp-content/uploads/2014/11/people-blue-stick-people-hi.png", nil];
...
// ... -(DraggableView *)createDraggableViewWithDataAtIndex:(NSInteger)index ...
// retrieve image for cell in background
NSURL *url = [NSURL URLWithString:exampleCardUrls[index]];
[self loadImage:url withIndex:index];
...
#pragma mark - cloud, load image
- (void)loadImage:(NSURL *)imageURL withIndex:(NSInteger)index
{
// create array of objects to pass to next method
NSMutableArray* params = [[NSMutableArray alloc]init];
[params addObject:imageURL];
NSNumber *indexNumber = [NSNumber numberWithInt:index];
[params addObject:indexNumber];
NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc]
initWithTarget:self
selector:@selector(requestRemoteImage:)
object:params];
[queue addOperation:operation];
}
- (void)requestRemoteImage:(NSMutableArray*)params
{
// get data from params
NSURL* imageURL = params[0];
NSData *imageData = [[NSData alloc] initWithContentsOfURL:imageURL];
UIImage *image = [[UIImage alloc] initWithData:imageData];
params[0] = image;
[self performSelectorOnMainThread:@selector(placeImageInUI:) withObject:params waitUntilDone:YES];
}
- (void)placeImageInUI:(NSArray*)params
{
// get data from params
UIImage* image = params[0];
NSNumber* indexNumber = params[1];
NSInteger index = [indexNumber integerValue];
DraggableView* myDraggableView = allCards[index];
myDraggableView.photoImageView.image = image;
allCards[index] = myDraggableView;
}
sprawdzić to uwagę, napisany w szybkim 4
https://github.com/nickypatson/TinderSwipeView
func beingDragged (_ gestureRecognizer: UIPanGestureRecognizer) {
xFromCenter = gestureRecognizer.translation(in: self).x
yFromCenter = gestureRecognizer.translation(in: self).y
switch gestureRecognizer.state {
//%%% just started swiping
case .began:
originalPoint = self.center;
break;
//%%% in the middle of a swipe
case .changed:
let rotationStrength = min(xFromCenter/ROTATION_STRENGTH, ROTATION_MAX)
let rotationAngel = .pi/8 * rotationStrength
let scale = max(1 - fabs(rotationStrength)/SCALE_STRENGTH, SCALE_MAX)
center = CGPoint(x: originalPoint.x + xFromCenter, y: originalPoint.y + yFromCenter)
let transforms = CGAffineTransform(rotationAngle: rotationAngel)
let scaleTransform: CGAffineTransform = transforms.scaledBy(x: scale, y: scale)
self.transform = scaleTransform
updateOverlay(xFromCenter)
break;
case .ended:
afterSwipeAction()
break;
case .possible:break
case .cancelled:break
case .failed:break
}
}
niech panGestureRecognizer = UIPanGestureRecognizer (docelowa: samodzielne działanie : #selector (self.beingDragged)) addGestureRecognizer (panGestureRecognizer)
Mam nadzieję, że to zadziała. Daj mi znać
dzięki
Najprostszym rozwiązaniem byłoby dodać kolejną Draggable widok spodu pierwszego. Potem po prostu przełączasz się między nimi. (Podczas przeciągania pierwszego, drugi siedzi w swoim miejscu, aż pierwszy zostanie usunięty i na odwrót). Więc 2 identyczne widoki, a ty po prostu naprzemiennie, który przeciągasz, a który ukryty. – Dima
https://github.com/modocache/MDCSwipeToChoose Może to zaoszczędzić trochę czasu. – Tim
wypróbuj to https://github.com/nickypatson/TinderSwipeView – nickypatson