你会如何用 swift 写这个?我在翻译时遇到了问题,因为 swift 是我的第一语言,而这一切都是用 Objective C 编写的。
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;
最佳答案
首先要做的事 - 我强烈建议您阅读有关 Swift 和 Objective-C 互操作性的资源。参见 https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/了解更多详情。
Swift 是一种有自己惯用语的语言。可以通过多种方式将 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)
}
关于swift - 将 UIScroll 和 UIPageControl 从 Objective C 翻译成 swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27627236/