The win saw the Italians top the table on head-to head results with Barca, leaving Lionel Messi & Co. to settle for second place on a disappointing night at the Camp Nou.
It was Ronaldo's first meeting with Barca since leaving bitter rivals Real Madrid in 2018 and it did not take long for the forward to make his mark on the game.
Defender Danilo flashed an effort just wide as the visitors cranked up the pressure, with a stunning McKennie volley putting the Italian champions two goals up and in full control seven minutes later.
"The defeat was because of how we played in the opening 25 minutes," a furious Barca coach Ronald Koeman said.
"We started badly, we looked scared, we weren't aggressive. It looked as if we'd come out looking not to lose, as opposed to trying to control the game. We weren't good, not even positionally.
"We got better but we lost the game in the first half an hour."
Ronaldo got his second penalty when Clement Lenglet was penalised for handball seven minutes after the restart.
Things almost got worse for the Catalans a quarter of an hour from time when Leonardo Bonucci thought he had scored, only for a VAR review to show he had been offside as he bundled the ball in from close range.
The result puts the under-fire Koeman under pressure, with the club suffering back-to-back defeats for the first time under his stewardship.
Forward Antoine Griezmann, however, said the defeat was not Koeman's fault.
"Who else's fault could it be other than the players? We're the ones who go out there and play," he said.
"We were missing everything: desire, attitude, a willingness to run. Everything was bad.
"We've left a really bad image here tonight, for ourselves and for the fans."