2014-12-23 1 views
0

Как бы вы написали это быстро? У меня возникли проблемы, потому что это перевод быстры мой первый язык, и это все написано в Objective C.Перевод UIScroll и UIPageControl из Objective C в swift

UIScrollView * scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * 3, scrollView.frame.size.height); 
    scrollView.delegate = self; 

    UIPageControl * pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 90, scrollView.frame.size.width, 20)]; 
    pageControl.numberOfPages = scrollView.contentSize.width/scrollView.frame.size.width; 
    [pageControl addTarget:self action:@selector(changePage:) forControlEvents:UIControlEventValueChanged]; 

Then you need to add the following two methods: 

- (IBAction)changePage:(id)sender { 
    CGFloat x = pageControl.currentPage * scrollView.frame.size.width; 
    [scrollView setContentOffset:CGPointMake(x, 0) animated:YES]; 
} 

-(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    NSInteger pageNumber = roundf(scrollView.contentOffset.x/(scrollView.frame.size.width)); 
    pageControl.currentPage = pageNumber; 
+0

Насколько вы понимаете быстры? с какими частями вы боретесь? – Okapi

+0

Ну, я знаю достаточно, чтобы знать, что я хочу подключить свой UIScrollView с моим PageController, и у этого есть ресурсы, которые мне нужны, но я получаю ошибки при вызове функции для pageController. Скажем, например, у меня есть func changePage (отправитель: UIPageControl) {pageControl.currentPage - есть ошибка, указывающая, что не существует доступ к странице Control.currentPage} – Tom

ответ

6

Первые вещи первое - я настоятельно рекомендую вам прочитать ресурсы на Свифта и Objective-C интероперабельности. См. https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/ для более подробной информации.

Свифт - это язык с его собственными идиомами. Код Objective-C может быть переведен в них различными способами. Например, вы должны использовать указатели при работе с объектами в Objective-C, что неявно позволяет иметь ссылку nil. Swift использует необязательные типы, чтобы выразить это, поэтому UIScrollView * scrollView может быть переведено в let scrollView : UIScrollView или let scrollView : UIScrollView?, в зависимости от контекста.

Конечно, это всего лишь верхушка айсберга. Возможные изменения в переводе в зависимости от контекста идут в режиме журнала, поэтому лучше изучить и понять базовый Swift, прежде чем вы начнете переносить свой код.

Хорошо, так как мы теперь все ясно, вот перевод:

let scrollView = UIScrollView(frame: CGRectMake(0, 0, 100, 100)) 
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * 3, scrollView.frame.size.height) 
scrollView.delegate = self 
let pageControl = UIPageControl(frame:CGRectMake(0, 90, scrollView.frame.size.width, 20)) 
pageControl.numberOfPages = Int(scrollView.contentSize.width/scrollView.frame.size.width) 
pageControl.addTarget(self, action: Selector("changePage:"), forControlEvents: UIControlEvents.ValueChanged) 


func changePage(sender: AnyObject) ->() { 
    let x = CGFloat(pageControl.currentPage) * scrollView.frame.size.width 
    scrollView.setContentOffset(CGPointMake(x, 0), animated: true) 
} 

func scrollViewDidEndDecelerating(scrollView: UIScrollView) ->() { 
    let pageNumber = round(scrollView.contentOffset.x/scrollView.frame.size.width); 
    pageControl.currentPage = Int(pageNumber) 
} 
+0

Спасибо, это была очень полезная информация! – Tom

Смежные вопросы